[운영체제] 시스템 구조 및 프로그램의 실행 Part2
#.동기식 입출력(synchronous I/O)
-I/O 요청 후 입출력 작업이 완료된 후에야 다음 작업을 실행
>I/O를 요청한 다음에 그 I/O 장치로부터 작업이 끝난 다음에야 사용자 프로그램이 다음 일을 할 수 있음
-구현방법 1 : CPU를 가지고 있는 채로 I/O 작업 끝날 때 까지 기다린다.
> I/O가 끝날 때 까지 CPU를 낭비시킴
> 매시점 하나의 I/O만 일어날 수 있음
>> 매 순간에 I/O 장치도 하나의 일만 하니까 I/O 장치도 낭비
- 구현방법 2 : I/O 요청 한 후 다른 프로세스에게 CPU 넘겨주기
> I/O가 완료될 때 까지 해당 프로그램에게서 CPU를 빼앗음
> I/O 처리를 기다리는 줄에 그 프로그램에게서 CPU를 빼앗음
> 다른 프로그램에게 CPU를 줌
#.비동기식 입출력(asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 바로 넘어감
> I/O 하라고 던져놓고 그 프로세스가 바로 CPU 다시 얻어와서 다음 일을 하는 것
=> 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
-synchronous
> user가 커널을 통해 I/O 작업 요청
> 하드웨어를 통해 I/O를 읽거나 쓰는 작업 수행
> 작업이 완료되었을 때 다시 user에게 인터럽트를 통해 알려줌
-Asynchronous
> user가 커널을 통해 I/O 작업 요청
> I/O 작업은 수행되지만 cpu제어권은 다시 얻어와 다른 일을 함
> 작업이 완료되었을 때 다시 user에게 인터럽트를 통해 알려줌
#.DMA (Direct Memory Access)
- 메모리를 접근할 수 있는 장치
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재없이 device controller 가 device의 buffer stroage의 내용을 메모리에 block 단위로 직접 전
- 작은 일 하나하나 인터럽트 걸리면 CPU 가 효율적으로 작동하지 못함
- 버퍼에 데이터가 block 단위로 쌓이면 CPU에게 한번 인터럽트 걸어서 알려주기
-> CPU가 인터럽트 당하는 빈도 낮아져서 효율적으로 일할 수 있게 됨
#.서로 다른 입출력 명령어
-좌 : I/O를 수행하는 special insturction에 의해
> 주 메모리 주소 따로, I/O 주소 따로 관리
-우 : Memory Mapped I/O에 의해
> 주 메모리 주소 규칙에 이어서 I/O 주소 규칙을 사용
#.저장장치 계층 구조
>가장 위는 CPU
- 주기억장치(Excutable)
> 레지스터
> 캐시메모리
>> 빠른 메모리 접근을 위한 복사된 정보
> 주 메모리
- 보조 기억장치(구성은 세대에 따라 달라짐)
> 하드디스크
> 광디스크
> 테이프
- 특징
> 위로 갈수록 속도가 빠르고, 용량이 적다.
> 주 기억장치는 휘발성, 보조 기억장치는 비휘발성
> 주 기억장치는 바이트 단위 접근, 보조 기억장치는 섹터 단위 접근