오래 못 할 짓 하지 않기
[ 컴퓨터 구조 ] 24. File I/O 본문
사용자와 컴퓨터는 Input / Output으로 교류한다.
따라서, I/O가 없으면 아무리 좋은 기술이 있어도, 얻을 수 있는 게 없다.
ex) 바퀴없는 차.
● Processor 와 IO Device들과 Mem 사이를 연결해주는 것 = BUS
● Bus의 Performance를 제한하는 것 : wire의 길이 , connections의 수
(추가적인 설명)
● BUS 의 장점
1) Versaility : 새로 Device를 추가하기 쉽고
Peripherals = Standard bus를 이용하는 IO device는 빼거나 이동시킬 수 있음 (조립하기 쉽다는 의미)
2) Low Cost : 하나의 wire를 여러 길로 빠지게 만들어서 공유하기 때문에 비용 절감 가능
● BUS 의 단점
1) Communiction bottleneck : 공통으로 병목 현상이 생긴다.
하나의 wire에서 I/O Device로 가는 bus가 진행중이면 다른 길로 가는 건 막힌다.
2) Maximum bus 의 속도는
- Bus 의 Length
- Devices 숫자 개수
- 커버해야하는 범위의 devices
Control / Data Lines
- Control Line : 어떤 type의 Info 가 있는지 Data line에 있는지 알려준다.
ex) 지금은 data 관련 이동. / 지금은 address 를 다룰거다.
- Data Line : Data / Address / complex commands
Bus transaction
Request 와 Resoponse를 포함한 Bus operation 의 순서
두 개의 파트로 나뉜다.
1) Sending Address
2) Receiving or Sending Data
Bus : Synchronous vs Asynchronous
- Synchronous
- Control line 안에 Clcok 이 들어가 있다.
- Clock 을 확인하기 위해 프로토콜이 있다.
- 장점 : 빠름
- 단점 : 1. 모든 device가 clock에 맞춰 움직여야 함
2. CLK이 딸깍 하는 곳과 먼 곳은 반응이 늦을 수도 있다. = Clock skew - Asynchronous
- CLK에 영향 X
- 넓은 범위의 devices를 수용 가능
- CLK skew 고려하지 않고 길이를 늘릴 수 있음
- Handshaking protocol 사용
Instruction Set Architecture for I/O
배경 : Processor는 I/O에 관련되어 어떤 일을 할까?
- Input : reads a sequence of bytes
- Output : writes a sequence of bytes
대답 : Special I/O Instruction
→ IO device와 Processor 사이에 데이터를 주고받기 위해서 필요한 Inst가 있다.
IO device가 어떤 일을 하고 그걸 OS에 알려줘야한다.
혹은 IO device에서 에러가 생겼을 때 알 수 있어야 한다.
그럴 때 쓸 수 있는 기술이 Polling과 I/O interrupt가 있음.
I/O device와 Processor(OS) 사이에 소통 관련하여 방법이 2가지가 있다.
1) Polling : CPU에서 I/O operation 을 계속 확인하는 것
==> IO device가 어떤 상태인지, 계속 주기적으로 체크함.
(애기를 어른들이 계속 체크하는 거라고 생각하면 편함)
장점 : Processor가 다 control할 수 있으며, 일들을 다 맡아서 할 수 있음
단점 : CPU 타임이 너무 낭비 ( 계속 확인해야 하기 때문에 )
processor는 일을 하기 전에 2가지 상태를 확인한다.
(1) Control register : 읽고/쓰는써도 되는지 확인하는 용 ( = I/O ready )
(2) Data register : data 담고있음
Control reg가 0 -> 1이면 써도 ㅇㅋ
그럼 가져올 거고, 다 끝나면 1 -> 0이 된다.
근데 계속 확인해야하니 단점대로 낭비가 너무 많다.
--> 그럼 Interrupt을 쓰자
2) I/O Interrupt : IO device가 변화가 생기면 CPU에게 알려줌.
비유 : 애가 다 크면 지 필요할 때 연락함
● 연락하는 사유
- Exception : CPU에서 일어남.
ex) undefined opcode , overflow , syscall
- Interrupt : 외부 External I/O controller
특징 : Interrupt (including exception) 은 시스템에서 따로 신경을 써야한다.
→ Interrupt 가 발생했을 때, 현재 진행중인 프로그램을 Inerrupt service routine으로 넘겨줘야 해서!
- Interrupt Handling Procedure
1) 현재 진행되는 Procedure 나오기 , CPU의 상태 저장 (PC)
2) 불려간 곳에서 필요한 Action들을 한다.
3) 1) 에서 저장했던 CPU상태를 가져와서 원래 하던 프로그램으로 돌아온다.
Interrupt 와 exception의 차이
1) Interrupt는 Instruction 실행에 synchronized하지 않다.
2) CPU가 I/O한테 일을 시킴 → I/O가 일을 끝냈고 그걸 CPU한테 말함
= I/O Interrupt (보고사항 있을 때 말하는 것)
DMA
Direct Memory Access :
배경: 명령어가 많아지면 CPU가 일을 IO component 한테 줘도,
계속 다시 보고하러 CPU한테 오니까 CPU도 할 일을 못 함
따라서 DMA를 만든다.
> CPU가 DMAC한테 [ 메모리 시작 주소 , Read / Write / 얼만큼 가져올지 ] 를 보낸다.
DMAC이 알아서 Mem과 IOC 사이에서 transfer 다 한다.
그거 다 할 때까지는 다시 보고 안 함.
요약
* Performance 는 OS와 device에서 가장 먼 곳으로 제한된다.
(출처)
한동대학교 용환기교수님 - 컴퓨터 구조
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
컴구 기말 (0) | 2023.12.07 |
---|---|
[ 컴퓨터 구조 ] 23. Virtual memory (0) | 2023.11.27 |
[ 컴퓨터 구조 ] 22. Cache performance (0) | 2023.11.26 |
[ 컴퓨터 구조 ] 21. Direct ( cache ) (0) | 2023.11.20 |
[ 컴퓨터 구조 ] 12주차 makeup 문제 (0) | 2023.11.16 |