System Structure & Program Execution 2: 동기와 비동기, 저장장치 구조, 프로그램의 실행, 커널
동기식 입출력과 비동기식 입출력
- 동기식: I/O 작업이 끝나야 제어가 사용자 프로그램에 넘어감
- 구현방법1: 작업이 끝날 때까지 기다림, I/O가 끝날 때까지 CPU를 낭비, 매시점 하나의 I/O만 일어날 수 있음
- 구현방법2: I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼았음, I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움, 다른 프로그램에게 CPU를 줌
- 비동기식: I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감
- 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
저장장치의 계층 구조
- 위로 갈수록 속도가 빠르지만 비싸고 용량이 적다.
- Primary 파트 <-> Secondary
- 휘발성(전원 오프시 저장 X)
- CPU에서 직접 접근 가능(cpu가 접근하는 Byte 단위로 접근 가능)
- Cache가 Main Memory와 Register 사이의 속도 차이를 보완해주는 저장공간의 역할을 함
프로그램의 실행(어떻게 컴퓨터에서 실행되나?)
- 파일의 코드를 읽어서 메인 메모리에 올리면 프로그램이 실행됨
- 중간에 가상메모리를 거치게 됨
- 프로그램을 실행시키면 해당 프로그램만의 독자적인 주소공간(Virtual Memory)이 만들어짐(Address space: code, data, stack)
- 메모리 낭비를 막기 위해 실행에 필요한 특정 주소 공간만 물리적인 메모리에 올리고 나머지는 Swap area라는 디스크 공간에 넣어 놓음
- 가상메모리에서 메인메모리로 올릴 때 주소 변환을 거침(Address transition)
커널 주소 공간의 내용
- 커널도 하나의 프로그램으로서 주소 공간을 가짐
- code: 운영체제가 하는 일에 관한 코드가 담김
- data: 운영체제가 사용하는 자료구조가 담김(HW를 관리하기 위한 자료구조 관련 코드), PCB(프로그램의 관리를 위해 프로그램마다의 정보를 담은 자료구조)
- stack: 운영체제도 함수로 구성되어 있기에 호출된 함수들의 정보, 프로세스마다 스택을 따로 관리
의문점 정리
- Instruction 수행과 Interrupt Line의 확인은 어떤 순서로 ? 언제 발생하는가? 하나의 Instruction이 끝나야만 Interrupt Line을 확인하는가 아니면 중간에도 확인이 가능한가?