본문 바로가기

CS/운영체제

[운영체제] 2. System Structrue & Program Execution (1)

더보기

kocw 반효경 교수님의 운영체제 강의를 수강 후 작성한 글입니다.

1. 컴퓨터 시스템 구조

- CPU

CPU는 연산을 수행하는 산술논리장치(ALU), 제어 명령을 전달하는 컨트롤 장치(CU), 결과 값을 일시적으로 기억하는 레지스터(Register)로 이루어져 있다.

- Memory

CPU의 Register 용량은 매우 작기 때문에 정보를 저장해서 읽어 들여올 주 기억 장치가 필요하다. 주 기억장치로는 ROM, RAM 등이 있으며 컴퓨터가 켜지면 운영체제, 사용자 프로그램 등이 메모리 공간에 올라간다. CPU는 주기억장치에서 프로그램들의 명령어 등을 읽음으로써 작업을 수행한다.

- I/O Device

입출력 장치란 사용자가 원하는 문자나 그림 데이터를 컴퓨터로 전달하여 입력하거나 출력하는 장치이다. 입력장치의 종류에는 키보드, 마우스이 있고 출력 장치로는 모니터, 프린터등이 있다.

 

컴퓨터 시스템은 크게 위의 3가지로 구성되어 있으며 이를 좀 더 세분화하면 다음과 같은 그림으로 나타낼 수 있다.

- Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 정해지위한 보호 장치 필요. 

Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation을 지원한다.

  • 1, 사용자 모드(=user mode) : 사용자 프로그램 수행
  • 0, 모니터 모드 (=kernel mode, system mode) : OS 코드 수행

보안을 해칠 수 있는 중요한 명령어는 모니터(커널, 시스템) 모드에서만 수행 가능한 '특권명령'으로 규정한다. 

 

- Interrupt나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꾼 후 실행해야 한다.

- 사용자 프로그램에게 CPU를 넘기기 전에는 mode bit을 1로 세팅해야 한다.

- Timer

  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.
  • 타이머는 매 클럭 틱 때마다 1씩 감소
  • 타이머 값이 0이 되면 타이머 인터럽트 발생 -> mode bit을 0으로 바꾸고 kernel mode로 넘어감
  • CPU Scheduling, CPU를 특정 프로그램이 독점하는 것으로 부터 보호

타이머는 time sharing을 구현하기 위해 널리 이용되며, 현재 시간을 계산하기 위해서도 사용한다.

- Device Controller

I/O device controller

  • 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register를 가짐
  • local buffer를 가짐 (일종의 data register)

I/O는 실제 device와 local buffer 사이에서 일어난다. Device controller는 I/O가 끝났을 경우 Interrupt로 CPU에 그 사실을 알린다.

 

  • device driver(장치구동기) : OS 코드 중 각 장치별 처리 루틴. CPU가 수행하는 코드, 펌웨어를 수행함 -> software
  • firmware(펌웨어) : 디바이스가 동작하기 위한 소프트웨어 -> software
  • device controller(장치제어기) : 각 장치를 통제하는 일종의 작은 CPU -> hardware

CPU가 instruction을 수행하다 I/O 장치를 접근해야 하는 상황이 오면, device driver를 통해서 device controller를 동작시킨다. Device driver도 본인이 일을 하기 위해서는 disk안에 firmware를 작동시켜 device controller를 동작시킨다.

- DMA (Direct Memory Access)

CPU가 각각의 I/O 디바이스를 통해 데이터를 읽어 메인 메모리의 프로그램에게 전달하게되면 CPU 효율이 떨어질 수 있으므로 주변기기의 인터페이스 장치에 제어권을 주어 직접 주기억장치와 데이터를 주고 바는 방식으로 액세스하여 데이터를 전송하는 방법

2. 입출력(I/O)의 실행

  • 모든 입출력 명령은 '특권명령' -> OS가 커널모드에서 수행해야 한다.(독점관리)
  • 사용자 프로그램은 어떻게 I/O를 하는가?
    1. 시스템콜(System call) : 사용자 프로그램은 운영체제에게 I/O 요청
    2. Trap(SW Interrupt) 를 사용하여 인터럽트 벡터의 특정 위치로 이동
    3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
    4. 올바른 I/O 요청인지 확인 후 I/O 수행
    5. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

3. 인터럽트 (Interrupt)

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

- 현대의 운영체제는 인터럽트에 의해 구동됨

 

Interrupt(넓은 의미)

  • Interrupt(하드웨어 인터럽트) : 하드웨어(타이머, disk controller 등)가 발생시킨 인터럽트
  • Trap(소프트웨어 인터럽트)
    • Exception : 프로그램이 오류를 범한 경우 (ex. memory violation)
    • System call : 프로그램이 커널 함수를 호출하는 경우

인터럽트 관련 용어

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

4. 시스템콜 (System Call)

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