Chapter 8. 입출력 장치
목표
- 장치 컨트롤러에 대해 이해한다.
- 장치 드라이버에 대해 이해한다.
- 프로그램 입출력 방식이 무엇인지 이해한다.
- 인터럽트 기반의 입출력 방식을 이해한다.
- DMA 입출력 방식을 이해한다.
01. 장치 컨트롤러
1. 장치 컨트롤러의 필요성
- 입출력장치의 종류는 매우 다양함
- 입출력장치의 데이터 전송률*은 CPU와 메모리에 비해 낮음
*전송률 : 데이터를 얼마나 빨리 교환할 수 있는 지에 대한 지표
2. 장치 컨트롤러란?
= 입출력 제어기 I/O contoller = 입출력 모듈 I/O module
- 컴퓨터와 입출력장치를 연결하는 하드웨어
3. 장치 컨트롤러의 역할
- CPU와 입출력장치 간의 통신 중개 ex. 번역가 역할
- 오류 검출
- 데이터 버퍼링*
*버퍼링buffering : 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼buffer에 저장하여 전송률을 비슷하게 맞추는 방법
-> 데이터를 버퍼에 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법
4. 장치 컨트롤러의 내부 구조
- 데이터 레지스터 data register
- CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터(버퍼 역할)
- 데이터가 많을 시 레지스터 대신 RAM을 사용하기도 함
- 상태 레지스터 status register : 입출력 작업 준비, 완료, 오류 여부 등의 상태 정보 저장
- 제어 레지스터 control register : 입출력장치가 수행할 내용에 대한 제어 정보와 명령 저장
02. 장치 드라이버
1. 장치 드라이버 device driver 란?
- 장치 컨트롤러의 동작을 감지하고 제어하여 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램
- (프로그램이기 때문에) 메모리에 저장됨
- 입출력장치를 연결하기 위한 소프트웨어적인 통로
03. 프로그램 입출력
1. 프로그램 입출력 programmed I/O 이란?
- 프로그램 속 명령어로 입출력장치를 제어하는 방법
- CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어짐
- 명령어의 표현 및 메모리 저장 방식 종류
- 메모리 맵 입출력
- 고립형 입출력
2. 메모리 맵 입출력 memory-mapped I/O
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
ex. 1,024개의 주소 표현이 가능할 때, 512개는 메모리 주소, 512개는 장치 컨트롤러의 레지스터 표현에 사용
3. 고립형 입출력 isolated I/O
- 메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법
ex. 메모리 읽기/쓰기할때 경로 따로, 입출력장치 읽기/쓰기할때 경로 따로
메모리 맵 입출력 | 고립형 입출력 |
메모리와 입출력장치는 같은 주소 공간 사용 | 메모리와 입출력장치는 분리된 주소 공간 사용 |
메모리 주소 공간이 축소됨 | 메모리 주소 공간이 축소되지 않음 |
메모리와 입출력장치에 같은 명령어 사용 가능 | 입출력 전용 명령어 사용 |
04. 인터럽트 기반 입출력
1. 인터럽트 기반 입출력 Interrupt-Driven I/O 이란?
- 입출력장치에 의한 하드웨어 인터럽트는 장치 컨트로러에 의해 발생
- CPU가 장치 컨트롤러에 입출력 작업 명령 -> 장치 컨트롤러가 입출력 수행(CPU는 다른 일 수행) -> 입출력 작업을 끝낸 장치 컨트롤러가 CPU에 인터럽트 요청 신호 송신 -> CPU는 하던 일을 멈추고 인터럽트 서비스 루틴 실행
2. 프로그래머블 인터럽트 컨트롤러 PIC : programmable interrupt controller
- 처리해야할 인터럽트가 많을 경우, 인터럽트에 우선 순위가 필요함
- 모든 인터럽트를 발생 순서에 따라 순차적으로 해결할 수 없음
- NIMI : 무시할 수 없는 인터럽트(우선 순위가 높음) ex. 하드웨어 고장, 정전
- PIC : 여러 장치 컨트롤러에 연결되어, 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤 CPU에 지금 처리해야 할 하드웨어 인터럽트를 알려주는 장치
3. PIC의 다중 인터럽트 처리 과정
1. PIC가 장치 컨트롤러에서 인터럽트 요청 신호들을 받아들임
2. PIC는 인터럽트 우선순위를 판단한 뒤 CPU에 처리해야 할 인터럽트 요청 신호를 보냄
3. CPU는 PIC에 인터럽트 확인 신호를 보냄
4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 보냄
5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해당 장치의 인터럽트 서비스 루틴을 실행함
3. DMA 입출력
1. DMA direct memory access
- 입출력장치와 메모리 간의 데이터 이동에 CPU가 관여함 -> CPU 부담이 커짐
- DMA : 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식 = 메모리에 직접 접근할 수 있는 입출력 기능
2. DMA 컨트롤러
- DMA 입출력을 하기 위해 시스템 버스에 연결된 하드웨어
3. DMA 입출력 과정
1. CPU는 DMA 컨트롤러에 입출력 작업을 명령
2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행(이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근)
3. 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림
4. 입출력 버스
1. 입출력 버스 input/output bus
- DMA의 시스템 버스 점유율이 높으면, CPU가 시스템 버스를 사용할 수 없음
- 이때, DMA 컨트롤러와 장치 컨트롤러들을 입출력 버스에 연결하여 해결
- 입출력 버스의 종류 : PCI peripheral component interconnect 버스, PCI Express(PCIe) 버스 등
Chapter 9. 운영체제 시작하기
목표
- 운영체제가 무엇인지 이해한다.
- 개발자가 운영체제를 알아야 하는 이유를 알아본다.
- 커널이 무엇인지 학습한다.
- 시스템 호출과 이중 모드에 대해 이해한다.
- 운영체제가 제공하는 핵심 서비스의 종류를 학습한다.
01. 운영체제
1. 운영체제 operating system 란?
- 실행할 프로그램에 필요한 자원*을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
*시스템 자원(자원) : 프로그램 실행에 마땅히 필요한 요소들
- 운영체제 또한 메모리에 적재되어야 하지만, 특별한 프로그램이기 때문에 컴퓨터 부팅 시 메모리 내 커널 영역*에 따로 적재되어 실행됨
*커널 영역 kernel space <-> 사용자 영역 user space : 커널 영역을 제외한, 사용자가 이용하는 응용 프로그램이 적재되는 영역
-> 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들의 자원 할당 및 올바른 실행을 도움
- 관리할 자원별로 기능이 나뉘어져 있음 ex. CPU 관리, 메모리 관리, 하드디스크 관리 등
2. 운영체제를 알아야 하는 이유
- 하드웨어 상태, 코드 실행 상황 등을 상세히 알 수 있고, 이를 통해 문제 해결 가능
ex. 오류 메세지의 근원이 운영체제
3. 커널 kernel 이란?
- 운영체제의 핵심 서비스*를 담당하는 부분
*자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 등
- 운영체제가 설치된 모든 기기에는 커널이 존재 ex. 사람의 심장, 자동차의 엔진
4. 사용자 인터페이스 UI user interface
- 커널에 포함되지 않는, 운영체제가 제공하는 서비스
- 사용자가 컴퓨터와 상호작용할 수 있는 통로 ex. 윈도우의 바탕화면
- 그래픽 유저 인터페이스 GUI graphical user interface
- 윈도우 바탕화면이나 스마트폰 화면처럼 그래픽 기반
- 커맨드 라인 인터페이스 CLI command line interface
- 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
5. 이중 모드
- 운영체제의 문지기 역할
- CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드, 두가지로 구분하는 방식
- CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 실행할 수 있음
- 사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행 모드 = 커널 영역의 코드를 실행할 수 없는 모드
- 일반적인 응용프로그램은 사용자 모드로 실행됨
- 커널 모드
- 운영체제 서비스를 제공받을 수 있는 실행 모드 = 커널 영역의 코드를 실행할 수 있는 모드
6. 시스템 호출
- 운영체제 서비스를 제공받기 위한 요청
- 필요 이유 : 사용자 모드로 실행되는 프로그램은 자원에 접근하기 위해선 운영체제에 요청을 보내 커널 모드로 전환되어야 함
- 일종의 소프트웨어적인 인터럽트*임
*소프트웨어 인터럽트 : 특정 명령어에 의해 발생하는 인터럽트
- 시스템 호출의 작동 예시 : 한 응용 프로그램이 하드 디스크에 데이터를 저장하려 할 때
1. 응용 프로그램은 하드 디스크에 데이터를 저장하는 시스템 호출을 발생시켜 커널 모드로 전환
2. 운영체제 내의 '하드 디스크에 데이터를 저장하는 코드'를 실행함으로써 하드 디스크에 접근 가능
3. 하드 디스크에 접근이 끝나면 다시 사용자 모드로 복귀
- 종류
02. 프로세스 관리
1. 프로세스 process
- 실행 중인 프로그램
- 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행 가능 -> 번갈아 가며 실행함
- 각 프로세스마다 상태와 사용하려하는 자원이 다양하기 때문에 운영체제에서 관리 및 실행이 필요
- 프로세스 동기화 : 여러 프로세스 동시 실행 시 필수 요소
- 교착 상태 : 프로세스가 꼼짝도 못하고 더 이상 실행되지 못하는 상황
03. 자원 접근 및 할당
1. CPU
- 운영체제는 프로세스들에 공정하게 CPU를 할당해야함
- CPU 스케줄링 : 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정함
2. 메모리
- 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재해야 할지 결정해야 함
3. 입출력장치
- 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공하여 입출력 작업을 수행함
04. 파일 시스템 관리
1. 파일 시스템 file system
- 운영체제가 지원하는 핵심 서비스
- 파일 CRUD, directory 관리
'공부 > TIL' 카테고리의 다른 글
한입 크기로 잘라 먹는 타입스크립트 : 함수와 타입 (0) | 2023.09.15 |
---|---|
[혼자 공부하는 컴퓨터구조+운영체제] Chapter 10 - 11 (0) | 2023.09.09 |
한입 크기로 잘라 먹는 타입스크립트 : 타입스크립트 이해하기 (0) | 2023.08.18 |
한입 크기로 잘라 먹는 타입스크립트 : 타입스크립트 기본 (0) | 2023.08.14 |
한입 크기로 잘라 먹는 타입스크립트 : 타입스크립트 개론 (1) | 2023.08.09 |