두 경우 모두 I/O의 완료는 인터럽트로 알려준다
- '동기식' 이라는 표현은 익숙하지 않아 Synchronous가 감이 더 잘 올 수 있다!
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다
- 구현 방법 1
- I/O가 끝날 때까지 CPU를 낭비시킨다
- 매 시점 하나의 I/O만 일어날 수 있다
- 구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는다
- I/O 처리를 기다리는 줄에 그 프로그램을 줄세운다
- 다른 프로그램에게 CPU를 준다
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 Device controller가 Buffer storage의 내용을 메모리에 block 단위로 직접 전송
- 바이트 단위가 아니라 Block 단위로 인터럽트를 발생시킴
- ex) 키보드 키 하나를 누를때마다 인터럽트가 걸리면 CPU의 효율이 떨어지므로 DMA Controller가 Memory로 복사 후 Block 단위로 인터럽트
가장 상위
- CPU
Primary
- Registers
- Cache Memory
- Magnetic Disk
Secondary
- Magnetic Disk
- Optical Disk
- Magnetic Tape
위로 갈수록 빠르지만 비싸며 휘발성이다
Caching : 정보를 더 빠른 Storage system에 복사하는 것
- 프로그램은 실행파일의 형식으로 파일 시스템에 저장이 되어있다
- 프로그램을 실행하면 메모리로 올라가서 프로세스가 된다
- 정확하게는 물리적인 메모리에 바로 올라가는 것이 아닌 중간에 Virtual memory라는 단계를 거친다 이때 주소공간이 형성되며 code, data, stack으로 구성된다
- 커널의 주소 영역은 부팅후 부터 메모리 영역에 상주하지만 프로그램은 일부만 올라가며 일시적이다
- Code
- 시스템콜, 인터럽트 처리 코드
- 자원 관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
- Data
- 운영체제가 사용하는 자료구조
- CPU, Memory, Disk와 같은 하드웨어를 관리하고 통제하기 위한 자료구조
- Process를 관리하기 위한 각 프로그램의 자료구조 (PCB : Process Control Block)
- Stack
- 운영체제는 함수구조로 짜여져 있기 때문에 함수를 호출할때 사용되는 커널 Stack
- 운영체제는 함수구조로 짜여져 있기 때문에 함수를 호출할때 사용되는 커널 Stack
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있다
- 커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 == 시스템 콜