Memory = CPU의 작업 공간
Register = Memory보다 작으면서 더 빠른 작업 공간
Interrupt line = CPU에서 다음 기계어의 입력이라던지, 디스크에서 읽어와야 하는 요청이 있는지, 일이 다 끝났는지를 (instruction을) 알기 위한 것
여기서 Disk는 하드 디스크는 Meomory로 읽어들이기도 하고, 처리 결과를 저장하기도 하여 IO device로 취급한다.
CPU가 Memory라는 작업공간을 필요로 하듯이,IO Device들도 일종의 data register로써 local buffer라는 작업 공간에서 작업한다.
mode bit
CPU에서 실행되는 것이 운영체제인지, 사용자 프로그램인지 구별해주는 것
두 가지 모드의 operation 제공
1 : 사용자 모드 - 사용자 프로그램 실행 (특정 명령만 실행 가능)
0 : 모니터 모드 - OS 코드 실행 (일반 명령까지 모든 명령 실행 가능)
timer - time sharing을 구현하기 위해 사용됨
정해진 시간이 흐른 뒤 제어권이 넘어가도록 인터럽트를 발생시킴
매 쿨럭 틱마다 1씩 감소
타이머 값이 0이 되면 타이머 인터럽트 발생
CPU를 특정 프로그램이 독점하는 것으로부터 보호
DMA Controller (Direct Memory Access Controller)
직접 메모리에 접근할 수 있는 컨트롤러
원래 메모리에는 CPU만 접근이 가능하지만, DMA Controller 또한 CPU에 접근할 수 있게 된다.
주된 역할을 CPU에게 인터럽트를 걸도록 하면 부하가 심하므로, CPU는 작업만을 하고, DMA Controller가 인터럽트를 관리한다.
memory Controller
DMA Controller와 CPU가 메모리에 접근할 때 같은 프로그램에 접근하지 않도록 중재하는 역할을 함
Device Controller
디바이스마다 붙어 있는 작은 CPU와 같은 장치(=하드웨어)
Device Driver
OS 코드 중 장치마다 이뤄져야 하는 처리 방식(=소프트웨어)
모든 입출력 명령은 특권 명령
사용자 프로그램은 어떻게 I/O를 하는가?
- 시스템 콜 : 사용자 프로그램은 운영체제에 I/O를 요청
1. trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
2. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
3. 올바른 I/O 요청인지 확인 후 수행
4. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
Interrupt(하드웨어 인터럽트) - 하드웨어가 발생시킨 인터럽트
Trap(소프트웨어 인터럽트)
-Exception : 프로그램이 오류를 범한 경우
-System Call : 프로그램이 커널 함수를 호출하는 경우
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널함수를 호출하는 것
IO 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어가는 것
구현 방법 1
-IO가 끝날 때까지 CPU를 낭비시킴
-매 시점 하나의 IO만 일어날 수 있음
구현 방법 2
-IO가 완료될 때까지 해당 프로그램에게서 CPU를 뺏어옴
-IO 처리를 기다리는 줄에 그 프로그램을 줄 세움
IO가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 사용자 프로그램에 즉시 넘어가는 것
위로 갈 수록 스피드는 빠르고, 용량이 적다.
초록
휘발성, CPU에서 접근하여 처리 가능하다.
분홍
비휘발성
캐싱 : 재사용성을 목적으로 빠르게 불러오는 것이 목적
파일이 실행된다고 바로 물리적 메모리에 올라가는 것이 아니다.
가운데에 이렇게 virtual memory(가상 메모리)가 있다.
그리고 당장 사용하는 부분은 물리적 메모리에 올려놓고, 당장 사용하지 않는 부분은 swap area라는 디스크에 내려놓게 된다.
code : 인터럽트가 들어오면 CPU를 얻는데, 각각의 인터럽트마다 무슨 일을 처리해야 하는지
data : 운영체제가 사용하는 자료구조가 위치 / 프로세스 관리(PCB), 하드웨어 관리
stack : 사용자 프로그램마다 커널 스택이 따로 존재
함수