본문 바로가기
운영체제

OS의 가동 및 interrupt

by LaTale 2020. 4. 6.

이전의 과정들은 모두 OS가 가동되고 난 후를 다뤘다.


그렇다면 PC의 전원을 켜고 OS는 어떻게 가동되는지에 대해 알아보도록 하겠다.


앞서 우리는 파워가 꺼져 있을 때 OS이미지(실행파일)는 HDD에 저장되어 있다는 사실과 메모리는 empty상태라는 사실을 알 수 있었다.


따라서 cpu는 아무 것도 할 수가 없고, OS를 구동하려면 HDD에 저장되어 있는 OS이미지를 메모리에 로드해야만 한다.


이러한 역할을 해 주는 프로그램이 bootstrap 프로그램이다.


bootstrap 프로그램은 파워를 켜면 제일 먼저 돌아가는 프로그램이며 boot-rom에 저장되어 있다.


이 프로그램은 다음과 같이 3가지의 작업을 수행한다.

1. 하드웨어 초기화(잘 작동되는지 확인)

 - OS에 의해 초기화를 하기에는 하드웨어의 종류가 너무 많다.

2. HDD로부터 OS이미지를 메모리의 first location으로 로드

 - first location은 0번지 또는 predefined인데 일단은 0번지로 생각한다.

3. OS를 가동한다.

 - bootstrap 프로그램의 마지막 명령어는 PC <- '0'이다. 즉, 2번 과정에서 옮겨둔 0번지의 OS이미지가 실행된다.


위와 같은 과정으로 OS가 가동된 이후에 첫번째 프로세스(pid=1)인 init()을 시작한다.

(참고로 pid=0은 scheduler(=swapper)이며 얜 어떤 프로세스를 먼저 실행할까 ? 에 대한 작업을 수행한다.)

init()은 절대 죽지 않는 프로세스이며 root 권한을 가진 사용자 프로세스이다. (자세한건 뒤쪽 프로세스에서 다루지 않을까 싶다..)


아무튼 위 과정을 부팅이라 하고, 부팅이 끝나면 OS는 유저의 요청을 기다리고 있는다.

그러다가 interrupts라 불리는 어떠한 events가 발생하면 기다림을 깨고 작업을 하게 된다.

즉, 현재의 OS는 interrupts에 의해 구동된다고 할 수 있다.



그렇다면 interrupts는 왜(언제) 필요한가 ??


간단한 예시를 통해 생각해보도록 하겠다.


1. CPU가 프로세스 A를 돌리고 있는데 A에 fscanf() 명령이 있다.

   즉, HDD로부터 데이터를 읽어와야 하는데 그 사이 CPU가 낭비되고 있다. (기다리고 있다.)


2. 이러한 낭비를 없애기 위해 HDD에서 데이터를 읽어오는 동안 A를 멈추고 B를 돌린다. (HDD까지는 controller가 다녀온다.)


3. controller가 데이터를 가져왔다면 interrupts를 걸게 된다. (다녀왔다고 신고하는 것이다.)


4. 이 때 돌아가서 A를 작업할지, B를 마저 작업할지는 우선 순위에 따라 다르다.


즉, CPU에 IO request가 발생하고, 처리되었을 경우 interrupts가 발생한다.[각주:1]


짧게 썼지만 중요한 부분이다. interrupts를 사용함으로써 보다 효율적으로 많은 프로세스를 돌릴 수 있게 된다.



위에서 간략히 나온 HDD까지 다녀오는 controller에 대해 알아보도록 하겠다.

(device controller이다.)


우선 그림을 통해 살펴보면 위와 같은 구조를 가진다.

오른쪽 과정들은 우리의 몫이 아니므로 적당히 넘긴다.


작동 과정을 살펴보면 각각의 구조를 쉽게 이해할 수 있다.


CPU가 어떠한 명령(read / write)을 내린다면 ->


Control Lines에서 값이 들어온다.

Address Lines에선 데이터의 주소가 들어온다.

write 명령의 경우 Data Lines에 값이 버퍼로 들어온다. ->


write 명령이라면 위 사진의 오른쪽으로 값이 나가 저장된다.

read 명령이라면 위 사진의 오른쪽에서 값을 읽어와 Buffer에 저장한다. ->


작업이 끝났으므로 Status Register를 1로 바꿔 Special lines를 통해 CPU로 가서 interrupt를 발생시킨다.

  1. IO request가 발생한 순간은 인터럽트가 아니다. [본문으로]

'운영체제' 카테고리의 다른 글

OS Structure, Hardware Protection  (0) 2020.07.07
메모리  (0) 2020.07.06
interrupt의 도착 이후  (0) 2020.04.13
CPU 명령 실행 과정  (0) 2020.03.29
컴퓨터 시스템의 구성 요소  (1) 2020.03.24