쉽게 배우는 운영체제 2판 책을 통해 내용을 정리한 글입니다!
컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며, 각 장치는 메인보드에 있는 버스로 연결된다.
데이터 전송 속도에 따라 저속 주변장치와 고속 주변장치로 구분 할 수 있다.
데이터가 지나다니는 하나의 통로를 채널이라고 부른다.
전송 속도가 비슷한 장치끼리 묶어서 장치별로 채널을 할당하면 여러 채널을 효율적으로 사용하여 전체 데이터 전송 속도를 향상할 수 있다.
입출력 제어기(I/O controller): 입출력 제어기는 CPU와 키보드와 같은 주변 장치 간의 데이터 흐름을 관리하는 컴퓨터 시스템의 장치 또는 구성요소이다. 입출력 컨트롤러 라고도 부른다.
현대에는 고해상도의 모니터와 3D 게임이 보급되면서 그래픽 카드가 많은 양의 데이터를 전송하게 되면서 입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다.
두 버스 사이의 데이터 전송은 채널 선택기(channel selector)가 관리한다.
정리:
현대 컴퓨터는 CPU와 메모리를 연결하는 메인버스, CPU와 그래픽카드를 연결하는 그래픽 버스, 고속 주변장치를 연결하는 고속 입출력 버스, 저속 주변장치를 연결하는 저속 입출력 버스를 사용한다.
주소 버스: 데이터를 가져올 주소
데이터 버스: 실제로 송수신되는 데이터
제어 버스: 명령어의 시작과 종료, 데이터의 이동 방향, 오류 처리, 인터럽트
직접 메모리 접근(DMA)은 CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한이다. 입출력 제어기에는 직접 메모리 접근을 위한 DMA 제어기가 마련되어 있다.
입출력 제어기는 여러 채널에 연결된 주변장치로부터 전송된 데이터를 적절히 배분하여 하나의 데이터 흐름을 만든다.
채널 선택기는 여러 채널에서 전송된 데이터 중 어떤 것을 메모리로 보낼지 결정한다.
메모리 맴 입출력(MMIO):
입출력 제어기가 DMA 제어기의 협업으로 작업이 완료되면 입출력 제어기는 CPU에 인터럽트를 보낸다. 인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 신호다.
외부 인터럽트:
내부 인터럽트:
시그널(signal):
인터럽트 벡터:
인터럽트 핸들러:
섹터:
블록:
하드디스크 입장에서는 섹터가 가장 작은 저장 단위이지만, 운영체제 입장에서는 하드디스크에 데이터를 보내거나 받을 때 블록이 가장 작은 단위가 된다.
파킹(parking): 컴퓨터가 종료될 때 헤드가 플래터의 표면에 흠집을 내지 않도록, 하드디스크는 헤드를 데이터가 저장되지 않는 플래터의 맨 바깥쪽으로 이동하는데 이를 파킹(parking)이라고 한다.
SSD(Solid State Disk):
공통점:
둘 다 단편화 현상이 발생한다.
차이점:
하드디스크의 경우 조각이 많이 발생하며 큰 덩어리의 데이터를 읽을 때 헤드가 여러 곳을 돌아다녀야 하므로 속도가 느려진다. 따라서 주기적으로 조각 모음을 실시해야 한다.
SSD는 메모리를 사용하기 때문에 데이터가 어디에 저장되어 있든 읽거나 쓰는 속도에는 차이가 거의 없다. SSD에서는 단편화가 데이터 접근 속도에 영향을 미치지 않기 때문에 조각 모음이 필요 없다.
하드디스크:
CD:
각속도 일정 방식의 회전: 하드디스크의 플래터는 항상 일정한 속도로 회전하여 바깥쪽 트랙의 속도가 안쪽 트랙의 속도보다 훨씬 빠르다. 그러므로 가장 바깥쪽에 있는 섹터가 가장 안쪽에 있는 섹터보다 더 크다. 일정한 시간 동안 이동한 각도가 같다는 의미에서 각속도 일정(constant angular velocity) 방식이라고 한다.
선속도 일정 방식의 회전: CD에서 사용하는 선속도 일정(constant linear velocity) 방식의 경우 어느 트랙에서나 단위 시간당 이동 거리가 같다. 이를 구현하려면 헤드가 안쪽 트랙에 있을 때는 디스크의 회전 속도를 빠르게 하고, 바깥쪽 트랙으로 이동했을 때는 디스크의 회전 속도를 느리게 해야 한다.
각속도 일정 방식의 섹터: 각속도 일정 방식의 하드디스크는 트랙마다 속도가 다르기 때문에 섹터의 크기도 다르다. 모드 트랙의 섹터 수가 같고 바깥쪽 섹터의 크기가 안쪽 섹터보다 크다. 안쪽 트랙에 비해 바깥쪽 트랙으로 갈수록 낭비되는 공간이 생긴다는 것이 단점이다. 디스크가 일정한 속도로 회전하기 때문에 구동 장치가 단순하고 조용하게 작동한다는 것이 장점이다.
선속도 일정 방식의 섹터: 선속도 일정 방식의 CD는 모든 트랙의 움직이는 속도가 같고 섹터의 크기도 같다. 안쪽 트랙보다 바깥쪽 트랙에 더 많은 섹터가 존재하므로 모든 트랙의 섹터 수가 다르다. CD는 한정된 공간에 많은 데이터를 담을 수 있고 하드디스크처럼 바깥쪽 트랙의 섹터 공간이 낭비되는 문제가 없으나 모터 제어가 복잡하고 소음이 발생한다는 단점이 있다.
디스크의 데이터 전송시간:
데이터 전송 시간 = 탐색 시간 + 회전 지연 시간 + 전송 시간
디스크 스케줄링(disk scheduling)은 트랙의 이동을 최소화하여 탐색 시간을 줄이는데 목적이 있다.
FCFS(First Come First Service) 디스크 스케줄링은 요청이 들어온 트랙 순서대로 서비스 한다.
아래 그림에서 헤드가 이동한 총 거리는 7+9+6+8+20+4+5+6=65다
동그라미 위에 숫자는 바로 앞 트랙에서 헤드가 이동해 온 거리를 나타내고, 가운데의 회색 부분은 이동한 영역을, 바깥쪽 하늘색 부분은 헤드가 지나가지 않은 영역을 나타낸다.
SSTF(Shortest Seek Time First) 디스크 스케줄링은 현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스 한다. 만약 다음에 서비스할 두 트랙의 거리가 같다면 먼저 요청받은 트랙을 서비스 한다. SSTF 디스크 스케줄링은 효율성이 좋지만 아사 현상을 일으킬 수 있다.
이동한 총 거리 -> 1+3+3+1+3+12+3+5=31
SSTF 디스크 스케줄링의 공평성 위배를 어느 정도 해결한 방법이다.
블록 SSTF 디스크 스케줄링에서는 큐에 있는 트랙 요청을 아래 그림과 같이 일정한 블록 형태로 묶는다.
SSTF 디스크 스케줄링에서는 현재 트랙에서 가장 먼 트랙을 큐의 맨 끝으로 이동하지만 블록 SSTF 디스크 스케줄링에서는 현재 트랙에서 가장 먼 트랙을 블록의 끝으로 이동한다. 따라서 멀리 있는 트랙도 몇 번만 양보하면 서비스를 받을 수 있다. (에이징 적용)
성능은 FCFS 디스크 스케줄링 만큼 좋지 못하다.
이동한 총 거리 -> 2+9+3+8+20+3+1+5=51
SCAN 디스크 스케줄링은 SSTF 디스크 스케줄링의 공평성 위배 문제를 완화하기 위해 만들어진 기법이다. SCAN 디스크 스케줄링에서는 헤드가 한 방향으로만 움직이면서 서비스 한다. 헤드가 움직이기 시작하면 맨 마지막 트랙에 도착할 때까지 되돌아가지 않고 계속 앞으로만 전진하면서 요청받은 트랙을 서비스 한다.
이동한 총 거리 -> 1+3+3+5+3+17+2+1+3=38
SCAN 디스크의 공평성 위배를 해결한 기법이다. SCAN 디스크 스케줄링을 변형한 것으로, 헤드가 한쪽 방향으로 움직일 때는 요청받은 트랙을 서비스 하고 반대 방향으로 돌아올 때는 서비스 하지 않고 이동만 한다.
C-SCAN은 작업 없이 헤드를 이동하기 때문에 매우 비효율적이다.
이동한 총 거리 -> 1+3+3+5+3+24+1+3+1+2=46 (SCAN 디스크 스케줄링보다는 성능이 좋지 않다.)
Look 디스크 스케줄링은 SCAN 디스크 스케줄링의 불필요한 부분을 제거하여 효율을 높이는 기법이다. SCAN 디스크 스케줄링에서는 트랙 요청이 없어도 헤드가 맨 마지막 트랙에 도착한 후에야 방향을 바꾸지만, LOOk 디스크 스케줄링에서는 더 이상 서비스할 트랙이 없으면 헤드가 끝까지 가지 않고 중간에서 방향을 바꾼다.
이동한 총 거리 -> 1+3+3+5+17+2+1+3+=35
C-LOOK (Circular LOOK) 디스크 스케줄링은 C-SCAN 디스크 스케줄링의 LOOK 버전이다. C-LOOK 디스크 스케줄링은 한쪽 방향으로만 서비스하는 C-SCAN 디스크 스케줄링과 유사하지만 더 이상 서비스할 트랙이 없으면 헤드가 중간에서 방향을 바꿀 수 있다는 점이 다르다.
SLTF(Shortest Latency Time First) 디스크 스케줄링은 헤드가 고정된 저장장치에 적용되는 스케줄링 기법이다.
SLTF 디스크 스케줄링에서는 작업 요청이 들어온 섹터의 순서를 디스크가 회전하는 방향에 맞추어 다시 정렬한다.
RAID(Redundant Array of Independent Disks)는 자동으로 백업하고 장애가 발생하면 이를 복구하는 시스템이다.
RAID는 동일한 규격의 디스크를 여러 개 모아 구성하며, 장애가 발생했을 때 데이터를 복구하는 데 사용된다.
데이터를 여러 조각으로 나누어 보내는 방식을 스트라이핑(striping)이라고 한다.
RAID 0은 병렬로 연결된 여러 개의 디스크에 데이터를 동시에 입출력할 수 있도록 구성된다.
RAID 1에서는 하나의 데이터를 2개의 디스크에 나누어 저장하여 장애 시 백업 디스크로 활용한다.
같은 데이터를 똑같이 복사하는 것을 미러링이라고 부른다.
RAID 2에서는 오류를 검출하는 기능이 없는 디스크에 대해 오류 교정 코드(ECC)를 따로 관리하고, 오류가 발생하면 이 코드를 이용하여 디스크를 복구한다.
RAID 3과 RAID 4에서는 오류 검출 코드인 패리티 비트를 사용하여 데이터를 복구한다.
RAID 3은 섹터 단위로 데이터를 나누어 저장한다.
오류가 없는 섹터를 이용하여 오류가 있는 섹터의 데이터를 복원할 수 있는데 이를 'N-way 패리티 비트 방식'이라고 한다.
RAID 3에서는 N-way 패리티 비트를 구성한 후 데이터 디스크가 아닌 별도의 디스크에 보관함으로써 장애 발생 시 오류를 복구한다.
RAID 4는 RAID 3과 같은 방식이지만 처리하는 데이터가 블록 단위로 되어 있다.
RAID 3에서는 데이터를 읽거나 쓸 때 패리티 비트를 구성하기 위해 모든 디스크가 동시에 동작해야 한다는 단점이 있지만 RAID 4에서는 데이터가 저장되는 디스크와 패리티 비트가 저장되는 디스크만 동작한다.
RAID 4는 병목 현상이 발생한다. 또한 패리티 비트가 저장된 디스크와 다른 디스크에서 동시에 장애가 발생할 경우 복구가 안 된다는 치명적인 단점이 있다.
RAID 5는 RAID 4와 같은 방법을 사용하지만 병목 현상을 해결한 기법이다.
RAID 5는 패리티 비트를 여러 디스크에 분산하여 보관함으로 써 패리티 비트 디스크의 병목 현상을 완화한다. 또한 RAID 4에서 패리티 비트가 있는 디스크가 고장 나면 복구가 어렵다는 문제도 해결한다. RAID 5에서는 패리티 비트를 해당 데이터가 없는 디스크에 보관한다.
RAID 6은 RAID 5와 같은 방식이지만 패리티 비트가 2개다.
RAID 5는 한 디스크에 장애가 발생했을 때는 복구가 가능하지만 디스크 2개에 동시에 장애가 발생했을 때는 복구가 불가능하다. 디스크 2개에 동시에 장애가 발생하면 패리티 비트가 사라지기 때문이다.
RAID 6는 패리티 비트를 2개로 구성하여 분산하므로 디스크 2개의 장애를 복구할 수 있다. 하지만 RAID 6은 패리티 비트를 2개씩 운영하기 때문에 RAID 5보다 계산량이 많다는 것과 4개의 디스크당 2개의 추가 디스크가 필요하다는 단점이 있다.
빠른 입출력이 장점인 RAID 0과 복구 기능이 있는 RAID 1의 결합
4개의 디스크를 2개씩 묶어 RAID 1로 구성하며, RAID 1로 묶인 디스크를 RAID 0으로 다시 묶는다.
병렬로 데이터를 처리하여 입출력 속도를 높일 수 있다.
장애 발생 시 미러링된 디스크로 복구가 가능하다.
RAID 10은 일부 디스크만 중단하여 복구할 수 있다.
RAID 10과 마찬가지로 RAID를 0으로 묶어 성능을 높이는 방식
RAID 50과 RAID 60은 RAID 10에 비해 추가되는 디스크의 수가 적지만 입출력 시 계산량이 증가한다.