2. System Structure & Program Execution (1)

토즐라·2022년 5월 11일
0

이번 글은 이화여자대학교 반효경 교수님의 강의와 Abraham Silberschatz의「Operating Syetems Concepts」를 바탕으로 작성했음을 밝힙니다.

2장의 내용은 운영체제에 대한 내용을 들어가기 앞서, 컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지, 그 다음에 프로그램들이 이러한 하드웨어 위에서 어떻게 돌아가는지에 대한 내용을 설명합니다.

즉, 2장의 내용은 컴퓨터 하드웨어에 대한 동작이고, 다음 장부터 운영체제에 대한 본격적인 내용이 시작됩니다.

이번 글은 컴퓨터 구조 관련 내용에 한에서는 간략한 내용만을 담고 있습니다.

2.1 컴퓨터 시스템 구조(Operating-Systems Services)

  • 컴퓨터는 보통 CPUMemory의 집합을 칭합니다.
  • 이외의 구성품을 I/O device 라고 부릅니다.

CPU

  • 매 클럭마다 메모리에서 instruction을 읽어서 실행합니다.

Register

레지스터는 CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간입니다. 프로세스 내부에 있는 작은 공간이고 연산 제어, 디버깅 등의 목적으로 사용됩니다.

Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치로, 사용자 모드와 모니터 모드(커널 모드)를 구분짓습니다.

  • 1: 사용자 모드
    • CPU가 사용자 프로그램을 수행합니다.
    • 제한된 instrcution만 CPU에서 수행할 수 있습니다.
  • 0: 모니터 모드(커널 모드)
    • CPU가 OS 코드를 수행합니다.
    • Memory 접근, I/O Device 접근이 가능한 instruction 수행이 가능합니다.

Timer

특정 프로그램이 CPU를 독점하는 것을 막기 위해서 OS가 사용자 프로그램에게 CPU를 넘겨줄 때에는 정해진 시간을 할당한 후에 넘겨주게 되는데, 이 시간이 다 흐르면 OS에게 제어권이 넘어가도록 인터럽트를 발생시킵니다.

  • Time Sharing을 구현하기 위해 널리 이용되는 장치입니다.
  • 현재 시간을 계산하기 위해서 이용되기도 합니다.

DMA(Direct Memory Access)

CPU가 I/O Device의 모든 interrupt에 반응하면 많은 overhead가 발생해 비효율적이게 됩니다. 따라서, 컴퓨터는 DMA라는 장치로 메인 메모리에 직접 접근할 수 있습니다.
DMA는 I/O가 빈번하게 일어나는 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용되며, 이를 통해 device controller는 CPU의 중재 없이 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송할 수 있습니다.
그리고, 전송 작업이 완료되면, CPU에 interrupt를 한 번만 걸어 interrupt가 걸리는 빈도를 줄이게 되는 것입니다.

Device Controller

I/O 장치를 전담하는 일종의 작은 CPU

  • 제어 정보를 위해 control register, status regieter를 가집니다.
  • 정보 저장을 위한 local buffer를 가집니다.
  • I/O가 끝났을 경우, interrupt로 CPU에 그 사실을 알립니다.

2.2 System Call

사용자 프로그램이 운영 체제의 서비스를 받기 위해 커널 함수를 호출하는 것을 의미합니다.

Interrupt

Interrupt 당한 시점의 레지스터와 PC를 저장한 후, CPU의 제어를 인터럽트 처리 루틴에 넘기는 작업입니다.

현대의 운영 체제는 인터럽트에 의해 구동됩니다. 운영체제는 CPU를 사용할 일이 거의 없는데, 인터럽트가 발생할 때에만 CPU가 운영체제로 넘어갑니다.

  • 하드웨어 인터럽트 (interrupy): 하드웨어가 발생시킨 인터럽트
  • 소프트웨어 인터럽트 (trap)
    • Exception: 프로그램이 오류를 범한 경우 ex) divided by zero
    • System Call: 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 관련 용어
    • 인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있는 벡터
      • 각각의 인터럽트 종류마다 어떤 루틴 주소로 가야 하는지를 담고 있습니다.
    • 인터럽트 처리 루틴: 해당 인터럽트를 처리하는 커널 함수
      • 각각의 인터럽트 종류마다 어떤 일을 해야 되는지에 대한 메뉴얼입니다.

모든 입출력 명령은 특권 명령이고, 사용자 프로그램은 직접 I/O를 하지 못합니다. 따라서 사용자 프로그램은 System Call 을 걸어 운영체제에게 I/O를 요쳥하게 됩니다.

I/O의 수행

모든 입출력 명령은 운영체제만 수행할 수 있는 특권 명령입니다. 사용자 프로그램은 직접 I/O를 하지 못하기 때문에 system call을 호출해 운영체제에게 I/O를 요청합니다.

이 때의 system call은 일반 함수 호출과는 다르게 본인이 직접 인터럽트를 걸어서 CPU가 운영체제에게 넘어가게 하는데, 이를 다른 말로 trap을 이용해 인터럽트를 건다고 합니다.

이 때 운영체제는 올바른 I/O 요청인지 확인해본 후 이 요청을 수행하게 되고, I/O가 완료되었을 경우 제어권을 system call 다음 명령으로 옮깁니다.

profile
Work Hard, Play Hard 🔥🔥🔥

0개의 댓글