## 목차 ##
## 1. 입출력 시스템 ##
(1) 입출력장치와 채널
- 입출력 속도가 비슷한 장치끼리 묶어 버스 채널을 할당하면 데이터 전송속도를 향상시킬 수 있다.
(2) 입출력 버스의 구조
초기의 버스 구조
- 주변 장치가 적고 CPU와 메모리 속도가 느렸다.
- 폴링 방식으로 직접 입출력 장치와 통신
- 모든 모듈이 하나의 버스로 연결
입출력 제어기 사용
- 모든 I/O를 제어기에 맡긴다.
- 입출력 버스를 따로 분리
- 메인 버스는 CPU와 메모리가 사용
- 입출력 버스는 주변장치가 사용
속도에 따른 입출력 버스 단계별 분리
- 랜카드, 디스크와 같은 고속 입출력 장치
- 키보드, 마우스, 프린터 등의 저속 입출력 장치
- 그래픽 카드의 경우는 특이한 케이스로 그래픽 버스를 따로 사용한다.
(3) DMA
- 직접 메모리 접근
- 메모리 접근 권한을 부여한 DMA 제어기를 두어 I/O장치와 직접 데이터 교환을 가능하게 하는 방식
- CPU가 해야할 일을 DMA 제어기가 대신 함으로써 CPU는 그동안 다른 일을 할 수 있다.
- 메모리 영역 중 일부를 DMA 제어기에 할당한다.(memory mapped I/O)
(4) 인터럽트
인터럽트
- 입출력 요구, 하드웨어 이상 등을 CPU에 알려주는 신호
- 내부 인터럽트, 외부 인터럽트, 시그널
외부 인터럽트 : 입출력 요구, 전원 이상, 기계적 오류 때문에 발생하는 인터럽트
- 장치별로 인터럽트 번호(IRQ)가 있고 이를 확인하여 어떤 장치에서 발생한 인터럽트인지 확인
내부 인터럽트 : 프로세스 실행 중에 발생하는 오류
- 프로세스의 잘못된 연산으로 발생하기 때문에 프로세스가 강제 종료된다.
시그널 : Unix 시스템에서의 Ctrl+C 혹은 kill 등 사용자가 직접 발생하는 인터럽트
- 모든 시그널에 인트럽트 번호 128번 할당
- 세부 시그널 번호를 따로 명시하고 이를 통해 시그널 종류 확인
인터럽트 벡터
- 여러 인터럽트 중 어떤 인터럽트가 발생했는지 확인하기 위한 자료구조
- 비트가 1이면 해당 인터럽트가 발생
- 벡터의 element별로 인터럽트 핸들러(함수) 매칭
인터럽트 핸들러
- 인터럽트가 발생했을 때 수행되는 함수
- 사용자가 인터럽트 핸들러를 직접 작성하고 재등록할 수 있다.
(5) 버퍼링
- 버퍼(buffer)
- 속도가 다른 두 장치의 속도 차이를 완화하기 위해 사용하는 저장 공간
- 장치는 버퍼에 데이터를 담아두고 다른일을 하면 다른 장치가 알아서 버퍼에서 데이터를 꺼내간다.
- 버퍼가 다 차기전에는 데이터 전송이 일어나지 않는다. flush()로 강제로 버퍼의 데이터를 전송할 수 있다.
## 2. 디스크 ##
디스크의 구조에 대한 내용은 아래 링크에 나와있다.
(1) 디스크 장치 관리
파티션(partition)
- 디스크를 논리적으로 분할한 공간
- 하나의 디스크를 여러 파티션으로 나누거나 여러개의 디스크를 노리적인 하나의 파티션으로 묶을 수도 있다.
- UNIX 운영체제는 여러 디스크를 하나의 파티션으로 묶어서 관리한다.
포맷(format)
- 디스크에 파일 시스템을 탑재하고 디스크 표면을 초기화한 후 파일테이블 탑재
파일 테이블
- 디스크에 저장된 파일의 위치와 크기 정보를 저장하는 자료구조
조각모음
- 파일을 쓰고 지우는 과정에서 중간중간 조각이 많이 생긴다.
- 조각때문에 큰 파일이 여러 조각으로 나뉘어 저장되면 여러 트랙을 오가기 때문에 탐색 시간이 늘어난다.
- 주기적으로 조각모음을 해주는 것이 디스크 성능에 좋다.
## 3. 디스크 스케줄링 ##
- 트랙(track)의 이동을 최소화하여 탐색 시간을 줄이기 위한 방법
(1) FCFS 스케줄링
First Come, First Service
가장 단순
요청이 들어온 트랙 순서대로 serve
(2) SSTF 스케줄링
Shortest Seek Time First
현재 헤드 위치에서 가장 가까운 트랙부터 serve
- 거리가 같다면 먼저 요청받은 트랙부터
- 거리가 낮은 순으로 큐에 배치
공평성을 위배하며 아사 현상 유발 가능성
- 이를 완화하기 위한 블록 SSTF 스케줄링 방식이 있다.
- SSTF 큐를 여러 블록으로 나누고 큐 재배치 시 블록 내에서만 내배치
(3) SCAN 스케줄링
SSTF 스케줄링의 공평성 위배 문제를 완하하기 위한 방식
헤드가 한 방향으로만 움직임
- 움직이면서 요청받은 트랙에 도착하면 serve
- 끝에 닿으면 반대 방향으로 이동 시작
성능은 SSTF에 비해 떨어지나 FCFS보다는 우수하다.
공평성 위배
- 동일한 트랙이나 실린더 요청이 연속적으로 발생하면 헤드가 더 이상 나아가지 못하고 머물게된다.
- 중간 부근 트랙들이 serve 받을 기회가 더 많고 안쪽이나 바깥쪽 트랙일수록 기회가 적다.
많이 사용하는 기법 중 하나
**(4) C-SCAN
한 쪽 방향으로 움직일때는 서비스하고 반대 방향으로 움직일때는 서비스 없이 이동만 한다.
SCAN의 공평성 위배 문제를 해결한다.
작업 없이 이동만 하는 작업 때문에 탐색시간이 늘어나고 비효율적
잘 사용되지 않는다.
(5) LOOK 스케줄링
SCAN의 불필요한 부분 제거
트랙 요청이 없으면 끝에 도착하지 않았어도 방향을 바꾼다.
많이 사용되는 기법 중 하나
(6) C-LOOK 스케줄링
C-SCAN의 LOOK 버전
C-SCAN과 같이 한 쪽 방향에서만 서비스하지만 서비스할 트랙이 없으면 중간에서 헤드가 방향을 바꾼다.
(7) SLTF 스케줄링
Shortest Latency Time First
모든 트랙 혹은 실린더마다 헤드가 달린 드럼에서 사용하는 디스크 스케줄링 기법
큐로 요청이 들어오면 디스크 회전시 만나게 되는 섹터 순서로 큐를 재배치하여 서비스한다.
## 4. RAID ##
(1) RAID 개요
RAID란?
- Redundant Array Of Independent Disks
- 작은 디스크 여러개를 배열구조로 연결하여 패키징한 유닛
하나의 대형디스크보다는 여러개의 소형 디스크를 연결하는것이 저렴한 가격으로 더 큰 용량의 디스크를 구성할 수 있게 해준다.
데이터를 다수의 디스크에 분산하여 저장함으로써 여러 디스크 동시 액세스 및 데이터 병렬 전송이 가능
- IBM3390 대형 디스크, IBM0061 소형 디스크, IBM0061을 배열구조로 연결하여 IBM3390과 동일한 용량을 가지도록한 RAID방식 디스크 비교
스트라이핑(striping)
- 데이터를 여러 조각으로 나누어 분산하여 저장
- 데이터 인터리빙(data interleaving)
- RAID0은 순수 스트라이핑 지원
미러링(mirroring)
- RAID 패키지의 유닛들 중 일부는 원본 데이터를 저장하고 일부는 백업용으로 사용한다.
- 같은 내용을 여러번 저장하기 때문에 디스크가 2배 필요하여 비용이 비싸다.
- 일부 유닛이 고장나면 미러 유닛으로 복원 가능
- RAID1은 순수 미러링 지원
- 미러 수만큼 디스크가 추가적으로 필요하기에 비용 발생
그 외
- RAID 2,3,4,5,6,50,60 등은 오류 교정 코드 등을 사용하여 추가되는 디스크 양을 줄이는 방식
아래 링크로 이어지는 포스팅에 RAID 종류별 특징을 정리해놓았다.
'CS > 운영체제' 카테고리의 다른 글
(운영체제) 1 - 운영체제 개요 연습문제 (0) | 2020.05.15 |
---|---|
(운영체제) 11 - 파일 시스템 (0) | 2020.05.15 |
(운영체제) 9 - 가상 메모리 관리 (0) | 2020.05.15 |
(운영체제) 8 - 가상 메모리의 기초 (0) | 2020.05.15 |
(운영체제) 7 - 물리 메모리 관리 (0) | 2020.05.15 |