[ 이화여대 운영체제 - 반효경 교수님 강의 ]
컴퓨터 시스템 구조, 인터럽트(Interrupt), 동기식 입출력과 비동기식 입출력, 시스템콜(System Call), DMA(Direct Memory Access), 서로 다른 입출력 명령어, 저장장치 계층 구조, 프로그램의 실행(메모리 load), 커널 주소 공간의 내용, 사용자 프로그램이 사용하는 함수, 프로그램의 실행
컴퓨터 시스템 구조
Interrupt
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- 하드웨어 인터럽트 : 하드웨어가 발생시긴 인터럽트
- Trap (소프트웨어 인터럽트)
- System Call : 프로그램이 커널 함수를 호출하는 경우
- Exception
Interrupt 관련 용어
- 인터럽트 벡터
- 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴
System Call
- 사용자 프로그램이 운영체제 코드를 수행하는 것이 불가능 → 운영체제의 서비스를 받기 위해 커널 함수 호출
동기식 입출력과 비동기식 입출력
- Synchronous I/O 동기식
- Asynchronous I/O 비동기식
synchronous → 시간을 맞추는 것.
ex) 립싱크 - 노래와 입술 모양을 맞추는 것.
- write는 async 하게 작동되는 것이 자연스러움. 만약 sync하게 작업시키고 싶을 때 sync 쓸 수도 있음. 구현하기 나름인 것.
- 그런데 io는 비교적 (cpu 작업에 비하면) 오래 걸리는 작업이므로 이를 기다리면 cpu가 낭비 될 수 있다. 그래서 다른 동기 프로세스에 cpu를 넘기게 된다. 이것이 위에 있는 구현 방법 2이다. 동기식 입출력이 보통 이 방식으로 구현된다.
- io 작업이 끝나면 cpu에 인터럽트 걸게 된다. 그런데 io 작업이 쉴새 없이 쏟아진다면..?
DMA (Direct Memory Access)
-
빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- 빠른 입출력 장치일 경우 interrupt를 더 많이 걸 것이므로 중간에 DMA 컨트롤러가 꼭 존재해야 한다.
-
문제: io device로 인한 cpu로의 interrupt가 너무 많아진다면 => cpu가 효율적으로 동작을 할 수 없다.
⇒ DMA도 메모리에 접근할 수 있게 해서 IO 작업들을 메모리에 쌓고, 어느 정도 쌓였으면 cpu에 interrupt를 걸어 작업을 하도록 한다.
IO를 할 수 있는 방법 2가지
- 왼쪽은 일반적인 IO 방식이다. 메모리 접근해야 하는 instruction과, 각 io device별로 접근하는 instruction이 각자 따로 있다.
- 오른쪽은 Memory Mapped I/O 방식으로, io device에다가 메모리 주소의 연장 주소를 붙여서 접근한다.
저장 장치 계층 구조
- 위로 갈수록 빠르고, 비싸고, 용량이 적고, 휘발성이다.
- primary 영역 → cpu가 접근해서 실행이 가능한 바이트 단위로 접근이 가능하다. 바이트 단위로 접근이 가능하다.
- secondary 영역 → byte 단위가 아닌 섹터 단위로 접근이 가능하다. executable하지 않은 매체이다.
- Caching → 빠른 매체로 정보를 읽어 들여 놓아 사용하는 것이다. 그러나 용량이 작으므로 어떤 것을 지우고 할 지가 주요 이슈가 된다.
프로그램이 실행되면
커널 주소 공간의 내용
- stack
- Process A의 커널 스택
- Process B의 커널 스택
- data
- code
- 자원 관리를 위한 코드
- 시스템콜, 인터럽트 처리 코드
- 편리한 서비스 제공을 위한 코드
사용자 프로그램이 사용하는 함수
프로세스 Address
커널 Address