Computer
CPU
: 매 쿨럭마다 memory
에 담긴 작업을 실행함 - register
:memory
보다 빠르면서 작은 작업 공간
- mode bit
: CPU
에서 실행되는 것이 OS
인지 사용자 프로그램
인지를 구분하는 자료
- interrupt line
: CPU
는 항상 memory
에 있는 instruction
을 시행한다. (memory
에서 실행해야 하는 주소값을 받아 시행)
이 때 memory
에서 작업을 하던 중 I/O device
의 명령이 들어왔을 때 수행 할 수 있도록 , I/O device
와 접근 가능하게 만드는 line
CPU는
memory
에 담긴 프로그램들에게만 할당되며 프로그램은 시간적 제약을 갖는다.
CPU
는 반복적으로memory
에 담긴 프로그램들에게 할당 되며 각 프로그램들은 실행 될 수 있는 시간적 제약이 존재한다. 이러한 시간적 제약은timer
에 의해 규제 되며 보통몇 십 ms
정도의 시간동안 실행 될 수 있다.
프로그램 별로 시간 제약이 존재하는 이유는 특정 프로그램이CPU
를 독점하여 다른 프로그램이 실행되지 않는 것을 방지하기 위함이다.
만약 메모리에OS
,프로그램 A
,프로그램 B
이 존재한다고 해보자.프로그램 A
가 무한 반복문이라 무한하게 반복되는 프로그램이라면프로그램 A
만 무한하게 실행하는 것이 아니라,timer
에 설정된 시간 이상으로프로그램 A
가 실행 될 경우 `interrupt line
에 신호를 주게 된다.
interrupt line
에 신호가 오면CPU
는프로그램 A
의 작업을 멈추고CPU
를OS
에 할당한다. 이후 다음 프로그램인프로그램 B
의 작업을 시행하고 다시 이전에 못끝낸 작업인프로그램 A
에게 할당되는 시스템이다.
프로그램들은
I/O device
에 접근 할 수 없으며 오로지OS
만이I/O device
에 접근 할 수 있다.이전에 말했듯
I/O device
의 속도는CPU
에 비하면 너무나도 속도가 느리다.
만약memory
에 있는 프로그램들이 순차적으로 실행되던 도중I/O device
에 명령을 내렸다고 가정하자.프로그램 A
를 실행하는 동안 내가키보드
를 입력한 상황이다.그러면 키보드에서 입력된 장치는 키보드의
local buffer
안에 신호를 담는다.
신호가 담기는 동안CPU
는I/O device
의 작업과 무관하게 계속memory
에 담긴프로그램
의 작업을들 시행하고 있다.이후
local buffer
에I/O device
의 입력이 들어온다면device controller
는interrupt line
에 신호를 주게 되며interrupt line
이 실행되었기 때문에CPU
는OS
에게 할당된다.
OS
는interrupt line
에 신호가 왔기 때문에 그 이유를 살펴보고 , 이것이프로그램 A
에서 키보드 입력이 들어왔음을 알기 때문에 키보드 입력에 대한 신호를프로그램 A 메모리
에 넣은 상태로 다시프로그램
들이 실행된다.
mode bit
은 현재 CPU
가 OS
에게 할당되었다면 0
, 사용자 프로그램
에게 할당되었다면 1
을 표시한다.
mode bit
은 보안상의 문제로 0일 때는 모든 접근이 가능하다.
하지만 1일 때는 모든 접근이 불가하며, 제한되어 있는 접근만 할 수 있도록 한다.
그러니 OS
에게 CPU
가 넘어갈 때에는 mode bit
이 0
, 프로그램
에게 넘어갈 때에는 mode bit
이 1
로 설정된다.
memory
: CPU
의 작업 공간- `CPU` 는 매 순간(쿨럭) `memory` 에서 기계어를 읽어서 작업을 수행하게 된다.
DMA controller
(Direct Memory Access)
I/O device
에 신호가 들어올 때 마다local buffer -> intterrupt line -> OS -> 신호 copy
하게 되면CPU
가 일을 하려고 하면 계속interrupt
가 걸려서 효율적이지 못하다.
이 때DMA controller
를 두게 되면DMA conttroller
가 직접local buffer
에 있는 데이터를memory
에direct
로 접근하여 작업을 할당한다.
이후interrupt
를 한 번 걸어CPU
에게 제가local buffer
에 있는 내용을 모두 걸었어요 라는 신호를 보낸다.
Memory controller
CPU
가 접근하려는 프로그램과DMA
가 접근하려는 프로그램이 겹칠 경우 문제가 발생 할 수 있기 때문에memory controller
가 어떤 기기가 먼저memory
에 접근 할지를 결정한다.
I/O device
I/O device
: device
로 input
을 보내거나 (키보드
), output
을 받는 (모니터
, 프린터기
)는 device
Hard Disk
는 보조 기억장치
로 disk 에 정보를 받거나, 보내는 장치 I/O device
는 마치 CPU
역할을 하는 것과 같은 device controller
를 갖게 된다. (device controller 는 하드웨어 !
)device controller
에 접근 할 수 있게 만드는 software
가 필요한데 그게 바로 device driver
(프린터기를 설치하면 프린터기 프로그램을 설치하는 것과 같음) I/O device
의 내부를 통제하는 것은 CPU
가 아닌 개별의 device controller
가 맡게 된다. (작은 cpu 역할
)제어 정보를 위한 register
: CPU
에 의해서 얻은 명령을 시행 할 수 있는 register
I/O device
들 또한 자기들만의 데이터를 저장 할 수 있는 작업 공간이 필요하며 이런 작업 공간을 local buffer
라고 한다.Interrupt
Interrupt : 하드웨어 인터럽트
: 하드웨어가 발생시킨 인터럽트 Trap : 소프트웨어 인터럽트
Exception
: 프로그램이 오류를 범한 경우System call
: 프로그램이 커널 함수를 호출하는 경우OS
는 올바른 I/O
요청인지를 확인하고 수행한다.I/O
완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.현대의 운영체제는 인터럽트에 의해 구동된다.
CPU
는 인터럽트가 없다면OS
에 접근하지 않고 사용자 프로그램만을 작동한다.
많은 작업들이 시행 될 때 마다인터럽트
가 발생하고OS
에서 해당 작업을 명령하고 프로그램에서 작업이 실행됨
I/O device
에 접근하는 것은OS
만을 이용해서 접근 할 수 있는특권 명령
이라고 하였다. 그럼 어떻게I/O
를 할까 ?
- 사용자 프로그램이 운영체제에게
I/O
에 접근하라고 명령을 보낸다 ->system call
system call
이 발생하면interrupt line
에 신호를 보내고mode bit : 0
,OS
에게CPU
를 할당한다.OS
는device controller
에게 명령을 한다.
Interrupt 정리
- 프로그램이
I/O
에 접근하려면System call
을 보내소프트웨어 인터럽트
OS
는device driver
를 통해device controller
에게 명령을 시킴- 명령을 보낸 후
CPU
는memory
에 있는프로그램
들을 열심히 실행함- 명령을 받은
I/O device
의 수행이 끝났다면 작업물을local buffer
에 담음local buffer
에 작업이 찼을 경우device controller
가하드웨어 인터럽트
를 실행함
인터럽트 관련 용어
다양한 인터럽트 별로 해야 하는 일들이 다르다.
인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러)
- 해당 인터럽트를 처리하는 커널인터럽트 벡터
- 인터럽트 종류 별로 어디에 있는 함수를 실행애햐 하는지, 함수의 주소를 정의해둔 일종의 테이블
CPU
는memory
에 담긴 작업들만을 수행함memory
에는OS
와사용자 프로그램
이 담아져있으며사용자 프로그램
은CPU
에 할당될 수 있는 시간의 규제가 존재함 (timer
)interrupt line
이 존재하며interrupt line
에 인터럽트가 들어올 경우CPU
는OS
에게 할당되며 ,OS
는 어떤 이유로interrupt
가 발생했는지 확인 후 다시프로그램
에게 할당됨프로그램
이timer
이상CPU
를 할당했을 경우interrupt line
에 신호를 보냄
4.1CPU
가OS
에게 할당되며timer
에 의한interrupt
임을 인지하면 다음프로그램
에게 할당됨- 보안상의 이유로
I/O device
에는OS
만 접근 가능하며프로그램
은 제한된 접근만이 가능함 (OS 가 접근하는 명령을 특권명령 이라고 지칭함
)프로그램
이I/O device
에 접근하고자 한다면interrupt line
에 접근하고자 하는 명령을 담은interrupt
를 보냄 ->소프트 웨어 인터럽트 (system call)
6.1OS
는 해당interrupt
를 보고device driver
를 통해device controller
에게 명령을 보냄
6.2CPU
는I/O device
의local buffer
에 작업이 완료 될 때 까지프로그램
들에게 할당됨
6.3local buffer
에 명령 받은 작업이 담기면device controller
는interrupt line
에 작업이 완료 되었다며interrupt
를 보내고OS
는 해당interrupt
를 해석하여system call
을 보낸프로그램
의 메모리에 해당 작업 내용을 담은 주소를 담음I/O device
에 접근 할 때 마다interupt line
에 인터럽트를 보내면CPU
가 일을 열심히 하지 못하니DMA (Direct Memory Access)
를 통해local buffer
에 담긴 내용물을memory
내부의프로그램
에 직접 담음
7.1DMA
는memory controller
에 의해 관리됨interrupt
별로 루틴이 필요하기 때문에 이를ISR (interrupt service routine)
으로 관리하며 루틴 별 함수에 대한 정보를Interrupt vector
를 통해 관리함