본문 바로가기

Dev.Basic/운영체제

[OS] 2-1. System Structure & Program Execution I

Chapter 2. System Structure & Program Execution I 







시스템의 구조와 프로그램의 실행에 대한 설명을 하기 위해 대략적인 도식을 나타내었다.


CPU의 여정

CPU내부에는 메모리보다 처리 속도가 빠른 Register라는 작은 공간이 존재한다.

그 중 다음에 수행할 명령어를 저장하는 PC(Program Counter)라는 것이 있는데,

이를 통해 다음 명령어를 수행하게 된다.

Instruction 은 주로 4Byte이기 때문에 PC값은 명령어를 하나씩 수행할 때마다 4씩 증가하게 된다.

CPU는 다음 수행할 명령어를 수행하기 전에 인터럽트가 들어온 게 있는지 확인한다.(Interrupt Line)

인터럽트가 들어오면 현재 하고 있던 작업을 멈추고(이 때, 수행한 정도를 기억하게 되는데 이를 프로세스 문맥이라고 한다.)

제어권을 운영체제에게 넘긴다.


각 요소에 대한 설명

Device Controller

device장치들에는 각각마다 작은 CPU라고 할 수 있는 device controller라는 것이 있다.

(device controller는 device에 붙어있는 하드웨어이다. )

이 controller는 그 device를 전담하여 컨트롤하는 역할을 한다.

그리고 이 device controller에게는 각각의 메모리인 local buffer라는 것이 존재한다.

device controller는 자신의 local buffer에만 접근할 수 있다.

device controller와 device driver(장치구동기)와는 다르다.

device driver는 운영체제를 구성하는 코드 중 장치별로 처리하는 루틴을 담고 있는 코드인 software의 일종이다.



Main Memory는 CPU의 작업 공간이다.

CPU안에는 interrupt line 과 mode bit이라는 것이 존재한다.


Mode bit

mode bit이란 CPU에서 실행되고 있는 것이 운영체제인지 사용자 프로그램인지 구분해주는 것이다.

즉, CPU제어권을 운영체제가 갖고 있는가, 사용자 프로그램이 갖고 있는가를 구분해준다.

mode bit의 값이 1이면 사용자 모드로 사용자 프로그램이 CPU 제어권을 갖고 있는 상태이다.

이 때는 제한된 Instruction만 CPU에서 실행시킬 수 있다.

mode bit의 값이 2이면 커널 모드로 사용자 운영체제가 CPU 제어권을 갖고 있는 상태이다.

이 때는 메모리 접근 뿐만 아니라 I/O device에 접근까지도 모두 수행 가능하다.
보안을 해칠 수 있는 중요한 명령어는 모니터모드(커널모드)에서만 수행 가능한 '특권 명령'으로 규정해두었다.
즉, 보호를 목적으로 Instruction Set을 별도로 분리해둔 것이다.

Interrupt Line
Interrupt line이란 CPU가 Instruction을 수행하면서 Interrupt가 있는지 확인하는 공간이다.
CPU가 엄청나게 빠른 속도로 여러 프로세스들을 수행하면서
주기적으로 확인하여 추가적으로 들어온 Interrupt가 있는지 확인하는 것이다.

Timer
Timer는 CPU의 time sharing을 구현하는 방법으로 하드웨어적으로 인터럽트를 발생시키는 것이다.
특정 프로그램이 CPU를 독점하는 것을 막기 위해서 존재한다.
특정 프로그램에게 CPU가 할당된 후 일정 시간이 지나면 운영체제에게 CPU제어권이 넘어가도록 인터럽트를 발생시킨다.

DMA controller(Direct Memory Access)
수많은 I/O device들로부터 수많은 인터럽트를 받게 된다.
이렇게 되면 CPU가 자신의 일을 할 틈도 없이 인터럽트만 받다가 끝날 것이다.(오버헤드가 발생한다)
이것을 방지하기 위해 존재한다.
CPU의 중재 없이 device들로부터 들어온 인터럽트를 처리하고 완료 신호만 CPU에게 보낸다.
메모리에 직접 접근할 수 있는 컨트롤러이다.

Memory Controller
Memory도 하나의 device 로 볼 수 있기 때문에 controller가 존재한다.
이 컨트롤러는 CPU와 DMA controller가 메모리에 동시에 접근하는 것을 제어하는 역할을 한다.


시스템 콜(System Call)
사용자 프로그램이 돌아가다가 운영체제에게 어떠한 요청(I/O 요청 등)을 하는 것을 시스템 콜이라고 한다.
즉, 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것이다.
인터럽트 별로 처리해야 할 커널 함수들이 지정되어 있는데 이것을 인터럽트 벡터라고 한다.
인터럽트 벡터는 해당 인터럽트의 처리 루틴 주소를 갖고 있으며 이 인터럽트 처리 루틴(인터럽트 핸들러)를 호출한다.
인터럽트 처리 루틴(Interrupt Service Routine)이 실제로 어떠한 요청을 수행하는 함수(코드) 부분인 것이다.
시스템 콜은 소프트웨어 인터럽트(trap)의 일종이다.
(Trap에는 Exception이라는 것도 있는데 이것은 프로그램이 오류에 의해서 인터럽트를 발생하는 것이다.)


현대의 운영체제는 인터럽트(하드웨어 인터럽트, 소프트웨어 인터럽트)에 의해 구동된다고 할 수 있다.



Chapter 2-1 끝
이 포스팅은 이화여대 반효경 교수님 강의를 듣고 요약한 내용을 담고 있습니다.