일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 파이썬
- 디바이스 입출력
- BFS
- OS
- 백준
- 코딩 테스트
- java
- 스택
- stack
- 프로세스
- 데드락
- 유니크 키
- 운영체제
- 큐
- 자료구조
- Python
- springboot
- 논리 메모리
- 백준 #
- 객체지향 프로그래밍
- integretion test
- SW Expert Academy
- error
- DP
- 캡슐화
- DFS
- queue
- 다익스트라
- unionfind
- OOP
- Today
- Total
middlefitting
I/O 디바이스 입출력에 관하여 본문
I/O 디바이스란
I/O 디바이스는 입출력을 수행할 수 있는 하드웨어 장치를 말합니다.
I/O 디바이스 종류의 예시는 다음과 같습니다.
- Input : 키보드
- Output: 모니터
- Input / Output: 하드디스크
I/O 의 작업과정
입출력은 디바이스 컨트롤러를 통해 명령을 수행
디바이스 컨트롤러란 I/O 디바이스를 전담하는 CPU 같은 것이고, 디바이스 내부를 통제합니다.
CPU는 직접 I/O 디바이스를 통제하지 않고 디바이스 컨트롤러에 위임을 하여 작업을 수행합니다.
그런 구조로 진행이 되는 이유는 컴퓨터에서 가장 빠른 CPU의 낭비가 이루어지면 안되기 때문입니다.
작업속도는 CPU >>>>> Lam >>>>> I/O 입니다.
따라서 CPU가 자기보다 상대적으로 느린 I/O 작업을 담당하고 기다리는 것은 큰 낭비일 것입니다.
CPU 의 운명은 열심히 누구보다 빠르게 남들과는 다르게 Instruction 명령을 수행하는 것 뿐입니다.
Mode bit, 누가 운영체제를 점유하고 있는가
CPU를 점유할 수 있는 친구들은 운영체제, 사용자 프로그램이 있습니다.
다만 이 둘은 수행할 수 있는 명령이 다릅니다.
이유는 사용자 프로그램이 실수로 혹은 악의적으로 운영체제 및 다른 프로그램에 피해를 끼치지 못하게 하기 위해서 입니다.
누가 CPU 를 점유하고 있는지 구분하기 위해서 Mode bit 이라는 비트를 사용합니다.
1은 사용자 모드, 0은 커널(운영체제) 모드입니다.
I/O 디바이스 컨트롤러에 명령을 내릴 수 있는 것은 운영체제 뿐
디바이스 컨트롤러에 I/O 요청을 할 수 있는 것은 운영체제 뿐, mode bit이 0일 경우만 가능합니다.
그러면 사용자 프로그램은 어떻게 I/O 요청을 할 수 있을까요, 그것은 시스템 콜을 통해 이루어집니다.
사용자 프로그램은 주소점프를 하지 못하기 때문에 사용하는 방법인데 사용자 프로그램이 커널 함수를 호출하는 것입니다.
사용자 프로그램은 I/O 요청을 위해 운영체제에 부탁을 하는 것입니다.
그 결과 프로그램은 interrupt line을 세팅하는 instruction을 실행하게 되고 interrupt 가 걸린 CPU는 modebit이 0으로 바뀌고
운영체제가 점유하게 됩니다. 그러면 운영체제는 사용자 프로그램이 부탁한 I/O 요청을 디바이스 컨트롤러에 요청을 하게 되는 것입니다.
I/O 작업 및 Local buffer
명령을 받은 디바이스 컨트롤러는 I/O 작업을 진행하게 됩니다.
I/O 작업을 위해서는 사용하는 메모리는 자체 메모리 영역인 local buffer에서 수행하게 됩니다.
출력은 메인 메모리에서 가져온 내용을 local buffer에 담아 수행할 것이고, 입력은 그 반대가 되겠습니다.
I/O 작업을 마친 후에는 CPU 에 interrupt를 걸어 작업을 끝냈음을 알리게 됩니다.
DMA 컨트롤러
원래 메인 메모리는 CPU만 접근할 수 있습니다. 다만 그러면 또 비효율적인 일들이 생깁니다.
그 예시로 I/O 작업을 위해 CPU 가 메인 메모리와 local buffer로 이동이라는 비용이 소요되는 일을 해야 합니다.
따라서 CPU를 돕기 위해 DMA 컨트롤러가 존재합니다.
직접 메모리를 접근할 수 있는 컨트롤러이며 local buffer를 메인 메모리로 복사하는 역할을 수행하게 됩니다.
그리고 복사가 끝나면 interrupt 걸어 작업을 끝냈음을 알리게 됩니다.
근데 CPU와 DMA 컨트롤러가 특정 메모리 영역을 동시에 접근하면 일관성 등 문제가 발생할 것입니다.
따라서 해당 교통 정리 역할로 메모리 컨트롤러가 존재합니다.
I/O 작업 이후
I/O 작업이 끝나고 메모리도 다 옮긴 이후에 interrupt 가 걸리면 CPU를 운영체제가 점유하게 됩니다.
이후 운영체제를 통해 CPU 는 I/O 를 요청한 사용자 프로그램으로 넘어가게 됩니다.
참고문헌
KOWS 운영체제 - 반효경 교수님 - System Structure & Program Execution 1
'OS' 카테고리의 다른 글
프로세스 관리에 관하여 (0) | 2023.01.27 |
---|---|
[Process] 프로세스란 무엇인가 (0) | 2023.01.26 |
[OS] Context Switch란 무엇인가 (0) | 2023.01.25 |
[I/O] 동기식 입출력과 비동기식 입출력 (0) | 2023.01.24 |
운영체제란 무엇인가 (0) | 2023.01.22 |