동기식 입출력과 비동기식 입출력
- 동기식 입출력(synchronous I/O)
- I / O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
- 구현 방법 1
- I/O가 끝날 때 까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
- 구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
- 비동기식 입출력 (asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
DMA(Direct Memory Access)
- DMA(Direct Memory Access)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
- 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
서로 다른 입출력 명령어
- I/O를 수행하는 special instruction에 의해
- Memory Mapped I/O에 의해
일반적으로 메모리에 접근하는 주소와 디바이스 주소가 다르다.
메모리 접근하는 주소로 디바이스 주소로 접근할 수 있다. (Memory Mapped I/O)
저장장치 계층 구조
Primary : Resister -> Cache Memory -> Main Memory
- CPU가 직접 접근해서 처리 가능한 저장장치
- 가격이 비싸고 속도가 빠르다.
- 휘발성이다(최근에는 Main Memory도 비휘발성으로 작동하는 제품이 있다.)
Secondary(비휘발성) : Magnetic Disk -> Optical Dist -> Magnetic Tape
- CPU가 직접 접근하지 못하는 저장장치
- 가격이 저렴하고 속도가 느리다.
- 비휘발성이다.
- 바이트 단위가 아닌 섹터 단위.
계층이 내려갈수록 속도가 느리고 가격이 저렴하고 비휘발성으로 작동한다.
- Caching : 재사용을 목적으로 저장장치에서 정보를 복사하여 보관한다. 속도가 빠르기 때문에 캐싱기능을 사용한다. 하지만 저장공간이 부족하기 때문에 Secondary의 정보들을 모두 담을 수가 없다.
프로그램의 실행(메모리 load)
프로그램을 실행시키게 되면 address space가 형성된다.
프로그램만의 독자적인 주소공간이 생기게 됨.
모든 프로그램이 독자적인 주소 공간을 갖고 있다. 일단 Virtual memory에 올려놓고 실질적인 연산이 필요한 경우만 Physical memory에 올려놓는다.
가상 메모리와 실제 메모리 사이에 주소 변환이 필요하다. 서로 가리키는 주소가 다르기때문..
커널 주소 공간의 내용
주소 공간은 크게 코드(code)
, 데이터(data)
, 스택(stack)
으로 나눌 수 있다.
커널 주소 공간에서의 코드
- 시스템 콜, 인터럽트 처리 코드
- 자원 관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
데이터
- 운영체제가 사용하는 여러 자료구조 정의
- CPU, memory, disk 와 같은 하드웨어를 다루기 위한 자료구조가 있다.
- 프로세스의 독자적인 주소공간을 관리하기 위한 자료구조(Process Control Block)이 있다.
스택
- 사용자 프로그램마다 커널 스택이 각각 있어 시스템콜을 요청할 수 있다.
사용자 프로그램이 사용하는 함수
함수(function)
-
사용자 정의 함수
-
자신의 프로그램에서 정의한 함수
-
라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있다.
-
커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 = 시스템 콜
출처
System Structure & Program Execution 2를 보고 정리