Coram Deo

[운영체제] - 2강 컴퓨터 시스템 구조 / Mode bit / Timer / Device Controller / 입출력(I/O)의 수행 / 동기식 입출력과 비동기식 입출력 / 시스템콜(System Call) / 인터럽트(Interrupt) 본문

운영체제

[운영체제] - 2강 컴퓨터 시스템 구조 / Mode bit / Timer / Device Controller / 입출력(I/O)의 수행 / 동기식 입출력과 비동기식 입출력 / 시스템콜(System Call) / 인터럽트(Interrupt)

탁탁슝 2023. 2. 6. 19:05

컴퓨터 시스템 구조

컴퓨터

  • cpu : 매 clock cycle 마다 메모리에서 instruction(기계어)를 하나씩 읽어서 실행하게 됨.
    • mode bit : cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해줌.
      • 1 사용자 모드 : 사용자 프로그램 수행 
      • 0 모니터 모드 : OS 코드 수행 (= 커널 모드, 시스템 모드)
      • mode bit이 0일때는 모든 instruction을 실행할 수 있음
      • - 특권명령 : mode bit이 0일때만 실행할 수 있는 명령어
      • mode bit이 1일때는 제한된 instruction만 실행할 수 있음(보안 목적)
    • registers : 메모리보다 빠르면서 정보를 저장할 수 있는 작은 공간
    • interrupt line : I/O device에서 요청이 들어왔을 때 cpu에게 전달함.
  • Memory 
  • timer : 특정 프로그램이 cpu를 독점하는 것을 막기 위한 하드웨어
    • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
    • 타이머는 매 클럭 틱 때마다 1씩 감소
    • 타이머 값이 0이 되면 타이머 인터럽트 발생
    • cpu를 특정 프로그램이 독점하는 것으로부터 보호
    • 타이머는 time sharing을 구현하기 위해 널리 이용됨
    • 타이머는 현재 시간을 계산하기 위해서도 사용
  • 동작 과정
    1. 처음에 컴퓨터 전원을 키면 운영체제가 cpu를 갖고 있다가
    2. 사용자 프로그램이 실행되면 그 프로그램에게 cpu를 넘겨준다.
    3. 넘겨줄때 timer에 값을 세팅한다. (보통 1초보다 짧음. 보통 수십ms)
    4. 세팅된 시간이 끝나면 timer가 cpu에게 interrupt를 건다. 
    5. cpu는 매번 하나의 instruction을 실행하고 interrupt line을 체크하는 것을 반복한다.
    6. interrupt line에 interrupt가 있다면 cpu는 운영체제에게 자동으로 넘어간다.
    7. 그 다음 운영체제가 다음 프로그램에게 cpu를 넘겨준다.
    8. 만약 프로그램이 I/O 작업이 필요하면 자진해서 운영체제에게 I/O를 해달라고 cpu를 넘겨준다.
    9. I/O작업을 하는 사이에 cpu는 다른 프로그램에게 넘어간다.
    10. I/O작업이 끝나면(ex.키보드 입력을 받으면) I/O controller가 interrupt를 걸어서 cpu가 알게되고
    11. 그렇게 되면 다음 instruction으로 넘어가기 전에 cpu는 운영체제에게 자동으로 넘어간다.
    12. 키보드 local buffer에 있는 입력받은 내용을 그 친구(I/O작업을 요청한 프로그램)의 메모리영역에 카피해준다.
    13. 만약 실행중이었던 프로그램의 할당시간이 남아있으면 할당된 시간이 끝난 후에 아까 들어온 interrupt를 처리한다.
  • DMA (Direct Memory Access) controller
    • 직접 메모리를 접근할 수 있는 컨트롤러
    • 목적
      • 원래는 cpu만 메모리를 접근할 수 있었는데 I/O장치가 너무 자주 interrupt를 거니까 cpu가 방해를 너무 많이 받음.
      • 그래서 DMA controller가 local buffer에 쌓인 내용을 메모리로 복사해줌
      • 그 작업이 다 끝났으면 cpu한테 인터럽트를 한번만 걸어서 알려줌.
      • 그렇게되면 인터럽트 빈도가 줄어들어서 cpu를 더 효율적으로 사용할 수 있음.
    • memory controller : 메모리와 DMA controller가 특정 메모리 영역을 동시에 접근하지 않게 교통정리해줌

I/O device

  • Disk (input/output device)
  • 키보드, 마우스 (input device)
  • 프린터 (output device)
  • 모니터 (output device)
    • I/O device controller(장치제어기, 하드웨어) 
      • 각 I/O device마다 붙어있어서 해당 I/O device를 관리하는 작은 cpu역할을 한다.
      • 제어 정보를 위해 control register, status register를 가짐.
      • local buffer(device controller들의 작업공간, 일종의 data register)를 가짐
      • I/O는 실제 device와 local buffer 사이에서 일어남
      • Device controller는 I/O가 끝났을 경우 interrupt로 cpu에 그 사실을 알림
    • device driver(장치구동기, 소프트웨어) (잘모르겠음 헷갈림)
      • OS 코드 중 각 장치별 처리루틴
      • * 디스크를 동작하기 위한 메뉴얼은 디스크안에 있는 펌웨어
      • device driver가 디스크에서 실제로 헤드를 움직여서 읽고 쓰는 코드는 아님
      • 디스크 컨트롤러가 그 코드의 지시를 받아서 일함
      • device driver는 이 장치(ex. 디스크)를 수행하기 위해서 필요한 cpu가 수행하는 코드를 담고 있음.

입출력(I/O)의 수행

모든 입출력 명령은 특권 명령(모드비트가 0일때만 수행가능한 명령)

사용자 프로그램은 어떻게 I/O를 하는가?

  • 시스템콜(system call) : 사용자 프로그램은 운영체제에게 I/O요청
    • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
    • 시스템콜은 일반적인 함수호출과는 다름
    • 함수호출은 instruction의 메모리 위치를 점프함.
    • 그러나 시스템콜은 점프가 불가능함. os에 해당하는 메모리 주소로 바꿀 수 없음. 왜냐면 mode bit가 1이므로 os에 해당하는 메모리 접근 허용이 안됨!
    • 프로그램이 운영체제에게 뭔가를 요청하기 위해서 소프트웨어적으로 직접 인터럽트를 걸 수 있음.
    • 인터럽트가 들어왔기 때문에 mode bit이 0으로 바뀌고 cpu 제어권이 운영체제에게 넘어감.
    • 만약 프로그램이 디스크에게 뭔가를 읽어오라는 걸 요청하기 위해 시스템콜을 했다면,
    • 운영체제가 cpu를 가지고 있기 때문에 디스크 컨트롤러한테 뭔가를 읽어오라고 부탁을 할 수 있는 것이다.

 

인터럽트(Interrupt)

  • 인터럽트 당한 시점의 레지스터와 program counter(pc)를 save 한 후 cpu의 제어를 인터럽트 처리 루틴에 넘긴다.

Interrupt(넓은 의미)

  • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
  • Trap(소프트웨어 인터럽트)
    • Exception : 프로그램이 오류를 범한 경우
    • System call : 프로그램이 커널 함수를 호출하는 경우
  • 보통 인터럽트라고 하면 하드웨어 인터럽트를 말하고, 소프트웨어 인터럽트는 Trap이라고 한다.
  • I/O를 하기 위해서 필요한 인터럽트
    • I/O 요청을 하기 위해서는 소프트웨어 인터럽트(System call)
    • I/O가 다 끝났으면 I/O 컨트롤러가 하드웨어 인터럽트로 cpu에게 알려줌.
  • *현대의 운영체제는 인터럽트에 의해 구동됨.
  • 운영체제는 cpu를 잡을 일이 없음. 인터럽트가 들어올때 빼고는!
  • 그렇지 않을 때는 항상 사용자 프로그램이 cpu를 쓰고 있음.

인터럽트 관련 용어

  • 인터럽트 벡터
    • 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(=Interrupt Service Routine, 인터럽트 핸들러)
    • 해당 인터럽트를 처리하는 커널 함수

 

 

* 이 포스팅은 이화여대 반효경 교수님 운영체제 강의를 보고 정리한 내용입니다.

반효경[운영체제] 3. System Structure & Program Execution 1

 

반효경 [운영체제] 3. System Structure & Program Execution 1

설명이 없습니다.

core.ewha.ac.kr