[개발일지]/필기

System Structure & Program Execution 1

broship 2021. 7. 25. 19:32

운영체제에 들어가기 앞서 하드웨어가 어떻게 돌아가는지 공부

computer: CPU + Memory

I/O device: disk, 키보드, 모니터 등

- I/O 디바이스는 각각 device controller 라는 하나의 작은 CPU를 가지고 있음

- I/O 디바이스는 CPU가 직접 관리하는 것이 아닌 device controller가 관리함

- CPU와 memory가 있듯 각각 I/O 디바이스도 local buffer가 존재

 

- CPU는 매 클럭 사이클마다 memory로부터 instruction을 읽어와서 실행함

 

- Interrupt line:

CPU의 속도와 I/O 디바이스의 속도는 크게 차이가남, CPU가 프로그램 A의 instruction을 실행하고 있을때 disk로부터 값을 읽어와야 하면(I/O디바이스를 사용해야 하면) disk controller에게 일을 맡기고 A는 OS에게 CPU를 반납함

그리고 CPU는 다음 프로그램을 계속 실행하다가 disk controller가 데이터를 가져오면 그때 interrupt를 당함, 그러면 CPU의 주도권이 OS에게 넘어감, OS는 disk로부터 읽어온 값을 memory에 저장해두고 다시 CPU를 중단되었던 프로그램에게 줌, 그렇게 진행되다가 disk를 읽어왔던 프로그램 차례가 되면 그때 memory에 올라와 있는 데이터를 가지고 프로그램을 실행함

 

- timer: CPU는 하나의 instruction을 실행하고 다음 프로그램으로 넘어가는데, 만약 무한루프 프로그램이 돌면 해당 프로그램을 담당하는 동안 나머지 프로그램을 실행하지 못함, 그래서 timer를 설정하여 어느정도 시간이 지나면 CPU를 반납하고 OS가 CPU를 가져감

처음 부팅될때는 OS가 CPU를 가지고 있는데, 그 후 프로그램이 실행되면 그때 OS가 timer를 설정해서 CPU를 넘겨줌

 

- mode bit: 지금 CPU를 사용하고 있는게 OS인지 사용자 프로그램인지 체크

0: 커널모드, OS가 CPU를 사용중일때

1: 사용자모드, 사용자 프로그램이 CPU를 사용중일때

0일때는 device controller 접근 등 모든 권한을 열어놓고, 1일때는 닫아놈 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치

 

- DMA controller: CPU는 메모리도 접근 가능하고 I/O 디바이스도 접근 가능한데, 그래서 인터럽트를 너무 자주 당함 DMA 컨트롤러는 I/O 디바이스에서 값을 읽어오는 것을 끝나면 그걸 메모리에 올린 후 한번만 CPU에게 인터럽트를 검, 그러면 CPU는 메모리에 올라와 있는 데이터를 바로 사용 가능

 

- device driver vs device controller

device controller: 각 장치를 통제하는 일종의 작은 CPU -> 하드웨어

device driver: OS 코드 중 각 장치별 처리 루틴 -> 소프트웨어

 

입출력 실행 방법:

- 모든 입출력은 특권명령, CPU만 명령할 수 있음, 사용자 프로그램이 CPU에게 입출력 부탁(커널 프로그램 실행)

- java 프로그램이 실행중이라 할때 반복문이나 함수 호출은 자기 자신 시스템 메모리 안에서 이동

- 하지만 입출력을 위해선 다른 장치를 사용하기 위해 OS에게 부탁해야 하는데 사용자 프로그램은 바로 OS에게 점프할 수 없음

- 그래서 사용자 프로그램은 입출력이 필요할때 스스로 인터럽트를 검(소프트웨어적으로 인터럽트를 검)

 

인터럽트 구분:

Interrupt: 입출력 장치들(하드웨어들)이 CPU와 정보 교신이 필요할때

- 하드웨어가 발생시킨 인터럽트

Trap: 사용자 프로그램이 돌아가다가 자신이 처리 못하는 걸 OS에게 부탁할때

- 소프트웨어가 발생시킨 인터럽트

- Exception: 프로그램이 오류를 범한 경우

- System call: 프로그램이 커널 함수를 호출하는 경우

 

- 그래서 입출력을 위해선 2번의 인터럽트가 필요함, 처음에 사용자 프로그램이 OS에게 부탁하기 위해 하는 trap과 입출력 장치들이 일을 끝마치고 디바이스 컨트롤러가 CPU에게 거는 interrupt

- 현대 OS는 인터럽트에 의해 좌지우지됨

 

인터럽트 관련 용어:

- 인터럽트 백터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음

- 인터럽트 처리 루틴: 해당 인터럽트를 처리하는 커널 함수

인터럽트에는 많은 종류가 있음 키보드, 디스크 등 입출력 인터럽트, 타이머 인터럽트, 사용자 인터럽트 등, 각각의 인터럽트를 처리하는 코드를 인터럽트 처리 루틴이라고 함

그리고 인터럽트가 들어올 때마다 실행해야 하는 코드 위치를 적어논 것이 인터럽트 벡터

'[개발일지] > 필기' 카테고리의 다른 글

Process Management  (0) 2021.08.12
Process2 - 스레드  (0) 2021.08.10
Process1  (0) 2021.08.03
System Structure & Program Execution 2  (0) 2021.07.28
Introduction to Operating Systems  (0) 2021.07.21