반응형
I/O
Two Main Jobs of Compter
I/O (대부분이므로 굉장히 중요하다)
ex. web browsing, file editing, youtube, games, ...
computing
I/O Type
- polling(busy-waiting)
- reading the status register repeatedliy until the busy bit becomes clear.
- interrupt
- CPU has a wire called the interrupt-request line
- if CPU detects an interrupt, ISR로 점프해서 인터럽트를 처리한다.
- ISR의 주소는 interrupt vector table에 정의되어 있다.
- DMA (Direct Memory Access)
- used to avoid prograamed I/O (one bytes at a time)
- 큰 데이터 전송을 처리할 때 유용하다
I/O Model
Blocking (블록킹)
- 애플리케이션 실행 시 운영체제 대기 큐에 들어가면서 요청에 대한 system call이 완료된 후에 응답을 보낸다.
Non Blocking (논블록킹)
- 애플리케이션 실행 시 운영체제 대기 큐에 들어가지 않고, 실행 여부와 관계없이 바로 응답을 보낸다. 바로 응답하기 힘든 경우, 에러를 반환하는데 정상데이터를 받을 때까지 계속해서 요청을 다시 보낸다.
Synchronous (동기)
- 시스템콜을 기다린다.
- (notify를 사용자 프로세스가 담당) 시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수는 아니다. (블로킹은 필수로 머물러야함)
Asynchronous (비동기)
- 시스템콜을 기다리지 않는다.
- (notify를 커널이 담당) 요청에 대해 처리완료 여부에 관련없이 응답하고 다음코드를 돌린다.
- 이후에 운영체제에서 처리완료여부를 알려주고 응답한다.
CPU와 입출력 기기에 접속하는 방법은 크게 두 가지가 있다.
Memory Mapped I/O
와 I/O Mapped I/O
이다.
Memory Mapped I/O
- 메모리와 I/O가 하나의 연속된 address 영역에 할당된다. 즉, I/O가 차지하는 만큼 메모리 용량은 감소한다.
- CPU 입장에서는 메모리와 I/O가 동일한 외부기기로 간주되므로, 이들을 액세스 하기 위해 같은 신호(read, write)를 사용한다.
- 소프트웨어적으로도 메모리에대한 액세스 or I/O에 대한 데이터 입출력이 동일한 것으로 간주된다.
- Load나 Store 명령에 의해 수행된다.
- 위 방식의 가장 큰 장점은 포트 입출력 구현 시, 복잡성이 사라지기 때문에 CPU 내부적으로 로직이 덜 필요하다.
- 이는 저렴하고, 빠르면서 쉬운 CPU를 만들기에 충분하다.
- 이 점이 RISC가 추구하는 바이다.(임베디드 시스템 구현시 장점으로 적용됨)
- 그러나, 주소와 데이터 버스를 많이 사용하게 되어, 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다.
- 사용시 I/O영역 변수는
volatile
타입으로 선언해야 한다. (컴파일러의 최적화 방지) - I/O영역은 Non-cacheable로 설정해야 한다.(캐시메모리로 접근할 경우, 변경된 내용은 가져올 수 없을 수도 있다.)
- 종합적으로 MMIO는 오픈소스 하드웨어를 갖다 쓰되, 내부 레지스터를 직접 건드려서 쓰는 것을 의미한다.
I/O Mapped I/O
- 메모리와 I/O가 별개의 어드레스 영역에 할당되는 것을 의미한다. 따라서 I/O를 사용하더라도 메모리의 용량은 감소하지 않는다.
- CPU 입장에서는 메모리와 I/O를 구분해야 하므로 이들을 액세스하기 위해서 RD, WR 신호 외에 추가적으로 I/O에 접근하기 위한 신호가 필요.
- 소프트웨어적으로도 메모리에 대한 데이터의 액세스와 I/O에 대한 데이터의 입출력이 서로 다른 것으로 간주된다.
- 그래서 메모리에 대한 액세스는
Load / Store
에 의해 수행되고, I/O 입출력은Input이나 Output
명령에 의해 수행된다. - 주로 Intel 계열의 프로세서에 사용된다.(x86)
- 가장 큰 장점은 Addressing 능력이 제한된 CPU를 사용할 때 발휘된다.
- I/O 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소영역 전체를 사용할 수 있다.
- 또한, 어셈블리어상에서 소스를 볼 때 입출력 수행 루틴을 알아보기 쉽다.
- ARM Processor는 임베디드 시스템상의 프로세서로, RISC구조이며, MMIO(Memory Mapped I/O) 방식을 취하고 있다.
- ARM 어셈블러나 c로 작성할 때, 실제로 메모리 주소를 포인터로 잡아서 값에 접근하는 모습을 볼 수 있다.
- 특히, 어셈블러상에서 in/out과 같은 I/O port 접근 명령어가 따로 존재하지 않고, 일반 메모리에 대한 접근인 id/st 명령어를 사용한다.
RISC ?
Reduced Instruction Set Computer
CPU 명령어의 갯수를 줄여 하드웨어 CISC보다 구조를 조금 더 간단하게 만드는 방식.
반응형
'Computer Science > [ OS ]' 카테고리의 다른 글
[ OS ] 21. 저장장치와 입출력 - 파일시스템 (0) | 2021.06.05 |
---|---|
[ OS ] 19. 저장장치와 입출력 - 디스크 저장장치 (0) | 2021.06.04 |
[ OS ] 18. 메모리 관리 전략 - 캐시 메모리 (0) | 2021.06.03 |
[ OS ] 17. 메모리 관리 전략 - 가상 메모리 Paging(페이지 교체 알고리즘)과 Thrasing(쓰레싱) (1) | 2021.06.03 |
[ OS ] 16. 메모리 관리 전략 - 가상 메모리 Paging (Demand Paging) (2) | 2021.06.03 |