-컴퓨터 시스템 = (CPU + Memory) + IO Device + (각종 Controller, timer, buffer , , , 등등)
input = IO 디바이스의 실행들을 컴퓨터 안으로 입력하는것.
output = 메모리에서 처리한 데이터를 받아 다시 IO 디바이스로 넘기는것
CPU - 중앙처리장치로써, 메모리가 CPU를 점유하여 사용할 수 있다. CPU에서는 매 클럭마다 메모리의 인스트럭션을 읽어서 실행시킨
Memory - 기억장치로, 실제 프로그램을 실행하는 영역, cpu를 이곳에서 점유하여 사용한다. 운영체제(OS)와 실행한 프로그램이 이곳에 있다.
IO장치 - 컴퓨터가 요청한 내용을 입력하고나, 컴퓨터에서 요청된 내용을 보여주는 장치
CPU 안에는 Register과 Mode bit, interrupt line 이라는것이 있음
실제 키보드 입력이 들어오거나 디스크에서 무엇을 읽어와야 한다면 cpu가 알아야 되는데, 그것을 Interrupt line에게 전달하여 Interrupt를 시킨다.
메모리 영역에서 사용자 프로그램이 cpu를 점유하고 있는지, 사용자프로그램이 cpu를 점유하고 있는지 mode bit를 통해 1과 0으로 구분한다.
(0은 운영체제, 1은 사용자프로그램)
CPU는 묵묵히 자신이 하는 일만 한다. (PC에 있는 내용에 의해서 메모리 접근을 하면서 다음 인스트럭션을 실행). 그 중간에 io요청이나, 디스크에서 데이터를 읽어와야 한다면 ? CPU가 직접 관여 하는것이 아니라, IO 장치에 있는 device controller에게 시킴. device controller는 작은 cpu처럼 io요청을 처리하고, local buffer에 그 내용을 저장하고, device controller가 이 작업을 다 끝났다고 cpu에게 인터럽트(Interrupt line에서)를 걸게됨.
컴퓨터를 실행시켰을 때 OS가 CPU를 가지고 있다가, 여러 사용자 프로그램이 실행되면서 CPU를 각 사용자 프로그램에게 넘겨주게 된다. 넘겨주는 작업은 할 수 있지만, 다시 되돌려 받는작업은 하지 못한다. 그러다보면 사용자 프로그램에서 CPU를 독점하는 상황이 발생할 수 있고, 이를 해결하기 위해서 timer라는것을 설정한다.
타이머(하드웨어)는 매 클럭 틱 마다 1씩 감소하고 타이머 값이 0이되게 되면 타이머 인터럽트를 Interrupt line에 던지고 인터럽트를 건다.
cpu는 매번 인스트럭션을 하나씩 실행하다가 하나의 인스트럭션이 끝나게 되면 Interrupt line을 체크하게 되는데, 타이머에 의해 요청된 인터럽트를 확인하게 되면 cpu는 하던일을 잠시 멈추게 되고, os에 소유권이 넘어간다. 그리고 다시 다른 사용자 프로그램을 실행 (타임쉐어링을 위한것)
사용자 프로그램은 IO장치에 직접 접근할 수 없어서 (OS만 접근 가능) IO요청 작업이 들어오게되면, CPU의 점유를 OS에 넘겨주게 되고 OS가 device Controller에게 그 작업들을 시키게 된다. 그 후 점유율을 다시 OS에서 하던 사용자 프로그램으로 돌아간다. 원래는 IO 장치가 요청 작업이 끝나면 device controller가 Interrupt를 cpu에게 걸게 되는데, 수많은 IO 요청에 의해서(인터럽트) cpu 효율이 줄어들 수 있기 때문에 중간에 DMA Controller라는것을 둔다. 여기서 DMA Controller과 CPU는 특정 메모리영역을 동시에 접근 할 수 있기 때문에 memory controller라는것이 그것을 중재하는 역할을 하고, DMA Controller는 IO 장치에서 local buffer에 입력된 내용을 메모리로 복사해줌. 그 작업이 다 끝나게 되면 cpu에게 한번만 인터럽트를 걸어서 보고를 해준다.
mode bit가 0이면 모니터모드 = 커널모드
mode bit가 1이면 사용자 프로그램 수행중
I/O device Controller
controller register - cpu가 일을 시킬 때 무슨일을 해라 라고 지시하는것
status register -
local buffer - 데이터 담은 localbuffer는 io에서 담은 데이터를 memory로 넘겨주거나 메모리에있는 내용을 모니터를 통해서 보여줄 때 등...
Device driver(장치구동기) - 소프트웨어임, 각 디바이스를 처리하기 위해서 디바이스 인터페이스에 맞게 접근할 수 있게 해주는 소프트웨어 모듈 (운영체제에 설치를 하게되면, 디바이스 드라이버를 통해 실행가능)
device controller - 각 디바이스마다 그것을 전담하기 위한 작은 하드웨어 장치(작은 cpu)
io장치를 접근해야 하면 Device Driver를 통해 Device Controller한테 읽으라는 명령을 한다.
사용자 프로그램은 운영체제를 통해서만 IO 접근이 가능한데, 만약 디스크에서 어떤 파일을 읽어와야 하는 상황이 생긴다면 운영체제한테 그것을 부탁한다
(시스템콜)
일반적으로 cpu는 요청되는 인스트럭션을 메모리 주소를 바꾸면서 함수를 호출하는 것이지만, 시스템 콜은 프로그램이 직접 interrupt line을 셋팅하는 인스트럭션을 실행한다.
timer, io controller가 인터럽트를 거는것이 아닌, 프로그램이 운영체제한테 무언가를 요청하기위해 소프트웨어적으로 인터럽트를 거는것. (trap)
하드웨어 인터럽트 - 하드웨어가 발생시킨 인터럽트(timer, io controller)
io controller 인터럽트 -> io요청 다끝났음을 cpu에 알려줌
인터럽트 처리 루틴 -> 실제 인터럽트 처리 함수
실제로 인터럽트 벡터라는곳에 처리 루틴 주소를 가지고있음(어딨는 함수를 실행해야하는지 ..)
'운영체제' 카테고리의 다른 글
[운영체제]5. Process(2) (1) | 2018.01.11 |
---|---|
[운영체제]4. Process(1) (3) | 2018.01.09 |
[운영체제]3. System Structure & Program Execution(2) (1) | 2017.12.29 |