![](https://velog.velcdn.com/images/chullll/post/488ce79b-3400-48af-be97-130db3fcd779/image.png)
CPU
: Memory의 instruction을 읽어서 처리하는 역할만 한다.
- register: Memory보다 빠른 저장공간을 가지고 있다.
- mode bit: instruction이 사용자 프로그램의 것인지 OS의 것인지를 구분하는데 사용된다.
0 커널모드 : OS 코드 수행
, 무슨 일이든지 수행할 수 있음
1 사용자모드 : 사용자 프로그램 수행
, 제한된 instruction만 수행할 수 있음 (e.g I/O 작업 등)
- 보안을 해칠 수 있는 중요한 명령어는
커널모드
에서만 수행 가능하고, 이런 명령어를 특권명령
이라고 규정
- Interrupt line: 원래 CPU는 Memory하고만 작업하지만, I/O device의 작용이 필요한 경우 사용된다. (e.g scanf 를 통한 키보드 입력)
- CPU는 I/O device controller에 I/O 작업을 명령한다. 이때 CPU는 작업을 기다리지 않고 다른 작업을 진행한다. I/O device는 작업이 끝나면 local buffer에 작업 결과를 저장한다.
- I/O device controller는 작업에 대한 결과가 들어오면 Interrupt를 보내고 자진해서 CPU 제어권을 넘겨줬던 프로그램이 다시 CPU를 넘겨받게 된다.
- 사용자 프로그램의 I/O에 대한 접근은 보안등의 이유로 불가능하기 때문에 이를 위해서 사용자 프로그램은 스스로 CPU 제어권을 OS에게 넘겨주고 이를 OS가 대신 요청하게 된다.
- CPU는 하나의 instruction이 끝날때마다 Interrupt line을 체크한다.
timer
: 특정 프로그램이 CPU를 독점하는 것을 막는 역할을 한다. 세팅된 시간이 지나면 CPU에게 interrupt를 보낸다. (시분할을 위한 장치)
I/O device Controller
: 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU, 제어 정보를 위해서 control register, status register를 갖고 있고, 일종의 data register인 local buffer를 가지고 있음
- 제어 정보를 위한 register : CPU의 명령을 저장하는 공간
- data register : 입출력을 위한 데이터를 저장하는 공간
device driver
: device별 OS의 처리루틴(s/w)
DMA(Direct Memory Access) Controller
: I/O 장치가 많아지면서 잦은 인터럽트가 CPU 작업에 방해가 됨. 이런 방해를 막기 위해 도입
- I/O device의 Interrupt에 의한 overhead를 줄이기 위해서
DMA
가 직접 local buffer의 작업 결과를 메모리에 copy 하고 CPU 에게 Interrupt를 한번만 보냄. -> Interrupt가 줄어듦
입출력의 수행
모든 입출력 명령은 특권명령임. 그렇다면 사용자 프로그램은 어떻게 I/O를 할까?
시스템콜(system call)
: 사용자 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출하는 것
- 사용자 프로그램은 OS에게 I/O를 요청함
- 프로그램이 의도적으로 interrupt line을 세팅함 -> OS로 CPU가 넘어감 -> OS가 다시 넘겨줄때 mode bit를 다시 1로 변경해서 넘겨줌
- trap을 사용해 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가키리는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O 요청인지 확인 후에 I/O를 수행
- I/O 완료 시 제어권을
system call
다음 명령으로 옮김
인터럽트(Interrupt)
인터럽트 당한 시점의 레지스터와 Program Counter를 save하고 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
interrupt(H/W interrupt)
: 하드웨어가 발생시킨 인터럽트
trap(S/W interrupt)
Exception
: 프로그램이 범한 오류
System call
: 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴(= 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
동기/비동기 입출력
![](https://velog.velcdn.com/images/chullll/post/4737ef38-9c13-4be5-b17a-c1b6650fe8b9/image.png)
synchronous I/O
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 -> 프로그램이 아무일도 못함
- 구현 방법 1
- I/O 가 끝날때까지 CPU 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
- 구현 방법 2
- I/O 가 완료될 때까지 해당 프로그램에서 CPU를 빼앗음 -> CPU와 I/O 장치 모두 놀지 않고 일을 함
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU 넘김
asynchronous I/O
- I/O 시작 후 입출력이 끝나는 것을 기다리지 않고 제어가 사용자 프로그램으로 즉시 넘어감 -> 입출력이 필요없는 작업을 진행
=> 두가지 경우 모두 I/O 완료는 인터럽트로 알려줌
DMA (Direct Controll Access) controller
![](https://velog.velcdn.com/images/chullll/post/fb446a31-7e9d-4fb4-8a57-6021063b980f/image.png)
- 잦은 인터럽트에 의한 오버헤드를 방지하기 위한 장치
- 빠른 I/O device를 메모리에 가까운 속도로 처리하기 위해서 사용함
- CPU 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송하게 된다.
DMA
가 내용을 메모리로 copy 해두고 인터럽트를 발생시킴
- 바이트의 단위가 아닌 block 단위로 인터럽트를 발생시킴 -> 작은 바이트에 의한 인터럽트 방지(e.g 1Byte)
저장장치의 계층구조
![](https://velog.velcdn.com/images/chullll/post/259e7677-ea96-4948-bae2-1a8f4296c8d0/image.png)
- 올라갈수록 빠르고 비싸고 용량이 작아짐
- primary : 휘발성, 바이트 단위로 접근이 가능 -> CPU 가 직접적으로 접근할 수 있음
- secondary : 비휘발성, sector 단위로 접근 가능 -> CPU 가 직접적으로 접근할 수 없음
프로그램 실행 (메모리 load)
![](https://velog.velcdn.com/images/chullll/post/8975852a-5f1b-4d8a-a70b-786c4f4591af/image.png)
- 파일을 실행시키면 프로세스는 가상 메모리에 독자적인 주소 공간을 할당받게 됨 -> 각 프로그램마다 독자적인 공간을 가지고 있는 것을
virtual memory
라고 부름.
- 실제 물리적 메모리에는 프로세스의 중요한 부분만 올림
- 중요하지 않은 부분은 swap area에 내려감 -> swap area는 전원이 나가면 내용이 사라짐, 메모리의 연장 공간으로 사용함
커널 주소 공간
![](https://velog.velcdn.com/images/chullll/post/b18512a6-08ea-4fe3-8416-9cdd7e8ed508/image.png)
- code,data,stack 으로 구성되어 있음
- h/w 를 종류마다 자료구조를 만들어서 관리함
- process를 관리하기 위한 PCB라는 자료구조를 만들어서 관리함
사용자 프로그램이 사용하는 함수
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
- process의 code 영역에서 사용
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있음
- process의 code 영역에서 사용
- 커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출은 시스템 콜을 통해서 호출함
- kernel의 code 영역에 접근해야 함 -> system call 을 통한 interrupt line 세팅 필요
출처 : http://www.kocw.net/home/search/kemView.do?kemId=1046323