Post

운영체제 - 반효경 2강

컴퓨터 시스템 구조

image

  • Memory : CPU의 작업 공간, CPU는 매시간 메모리에서 instruction(기계어)을 읽어 실행한다.

  • CPU : 매시간 메모리에서 instruction(기계어)를 읽어 처리함. 그것만 함.
    • registers : 메모리보다 더 빠른 정보를 저장할 수 있는 공간
    • mode bit : CPU에서 실행되는 것이 운영체제(0)인지, 사용자 프로그램(1)인지 구분해줌. mode bit = 0일 때는 커널 모드로 모든 접근이 가능, mode bit = 1이면 특정 명령만 수행 가능(I/O 접근 X 등)
    • interrupt line : CPU가 다른 일을 해야한다는 interrupt를 받으면 이 interrupt line이 해당 라인을 읽고 OS에게 CPU 점유권을 넘겨준다. ex) I/O 작업이 끝날 때, 특정 프로그램이 CPU를 오랫동안 점유할 때
  • I/O device : CPU와 I/O device는 속도 차이가 많이 남. 이런 차이 때문에 CPU가 직접 관리 X, 일반 사용자 프로그램은 I/O device에 직접 접근 X -> OS를 통해서만 접근 가능

    • device controller : I/O device들은 각자 device controller라는 컴퓨터로 치면 CPU의 역할을 하는 controller가 존재한다. I/O device는 CPU가 아니라 각 controller가 관리하게 된다.
      • device driver = CPU가 쓰기 위한 코드, 각 장치별 처리 루틴 -> software
      • device controller = 일종의 작은 CPU -> hardware
    • local buffer : CPU의 작업 공간인 memory가 있는 것처럼 I/O device의 작업공간인 buffer가 존재한다.
  • timer : 특정 프로그램이 timer에 세팅된 시간을 넘어서 CPU를 점유하고 있다면 interrupt를 발생시켜 OS에게 CPU를 넘겨줌(time sharing(시분할) 구현을 위해 사용)

  • DMA controller : CPU가 직접 I/O interrupt를 받으면 너무 자주 CPU가 사용되어 오버헤드가 큼. DMZ가 I/O device의 local buffer에 있는 데이터를 메모리에 복사해서 넣어주는 역할. 모든 입력이 끝났을 때 한번만 CPU에게 interrupt를 걸어 CPU를 효율적으로 사용.

    image

  • Program counter : CPU가 프로그램의 어디까지 instruction을 실행했는지 주소를 가지는 register

Interrupt

  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘김

  • Interrupt

    • interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
    • Trap(소프트웨어 인터럽트) : Exception, System call(프로그램이 커널 함수를 호출하는 경우)
  • 관련 용어

    • 언터럽트 벡터 : 인터럽트 마다 어떤 함수를 실행하면 되는지 그 메모리 주소를 가지고 있는 일종의 테이블
    • 인터럽트 처리 루틴 : 인터럽트마다 처리해야하는 실제 동작 코드(함수)
  • System Call

    image

I/O의 수행

  • 모든 입출력 명령은 커널 모드에서 실행
  • 사용자 프로그램이 I/O를 수행하는 방법
    • I/O가 필요함 -> 시스템 콜을 이용 -> 동시에 사용자 프로그램이 직접 인터럽트를 걸어서 OS에게 CPU 제어권을 넘김 -> 요청 수행

동기식/비동기식 입출력

  • 동기식 입출력(synchronous I/O)
    • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 구현 방법 : 1) I/O가 끝날 때까지 CPU를 waiting 시킴, 2) I/O가 완료될 때까지 다른 프로그램에게 CPU를 줌 - 보통 2번을 함(1번은 CPU 낭비)
  • 비동기식 입출력(asynchronous I/O)
    • I/O 요청 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

image

저장장치 계층 구조

image

  • 맨 위에는 CPU가 존재
  • 위의 Primary는 CPU에서 직접 접근 가능한 영역이고 보통 volatility(휘발성)이다.
  • Main Memory와 CPU의 속도 차이를 완충시키기 위해 Registers나 Cache Memory가 존재한다.

프로그램의 실행

image

  • 실행 파일 A 실행 -> 각 프로그램의 독자적인 가상 메모리 생성 -> 실제 물리 메모리에는 실제 사용되고 있는 코드만 올라감(메모리 낭비 방지) -> 프로그램 종료 전까지 필요한 부분은 물리 메모리, 그렇지 않은 부분은 Disk의 Swap area에 내려놓음(메모리의 연장 공간으로 Disk를 사용, 휘발성)

커널 주소 공간

image

  • 커널에서는 실제 하드웨어를 관리해야하기 때문에 각 하드웨어마다 자료구조를 하나씩 가지고 있음
  • 또 프로세스도 관리하기 때문에 프로세서를 관리하기 위한 자료구조도 가지고 있음(PCB)
  • 커널은 다양한 프로세스에서 시스템 콜을 통해 사용할 수 있기 때문에 각 프로세스마다 서로 다른 커널 스택을 가지고 있음

함수 종류

  • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램의 실행 파일에 포함됨
  • 커널 함수 : 운영체제 프로그램의 함수, 커널 함수의 호출 = 시스템 콜

image

출처)

[운영체제 - 이화여자대학교KOCW 공개 강의](http://www.kocw.net/home/cview.do?cid=3646706b4347ef09)
This post is licensed under CC BY 4.0 by the author.