컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며, 각 장치는 메인보드에 있는 버스로 연결된다.
다양한 주변장치는 데이터 전송 속도에 따라 저속 주변 장치와 고속 주변장치로 구분할 수 있따.
저속 주변장치: 메모리와 주변장치 사이에 오고 가는 데이터의 양이 적어 데이터 전송률이 낮은 장치를 말한다. 키보드의 경우 아무리 빨리 타이핑을 한다고 해도 1초에 1KB를 넘지 않으므로 저속 주변장치이다.
고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치를 말한다. 출력장치인 그래픽카드의 경우 모니터에 초당 수십 장의 그래픽을 보여주어야 하기 때문에 고속 주변장치이다. 하드디스크도 대용량의 데이터를 메모리에 올리거나 메모리에서 하드디스크로 옮겨야 하기 떄문에 고속 주변장치이다.
데이터 용량이 적다면 저속, 많다면 고속이다.
여러 주변장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결되기 때문에 버스를 1개만 사용하면
병목 현상이 발생한다. 따라서 여려 개의 버스를 묶어서 사용하는데,
이 때 데이터가 지나다니는 하나의 통로를 채널이라고 부른다.
입출력 제어기는 2개의 채널, 즉 메인버스와 입출력 버스로 나뉘며, 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다. CPU에서 입출력 요청이 오면 입출력 제어기는 입출력장치로부터 데이터를 직접 송수신한다. 입출력 제어기를 사용하면 느린 입출력 장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향산된다.
입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다. 고속 입출력 버스에는 고속 주변장치를 연결하고 저속 입출력 버스에는 저속 주변장치를 연결하여, 두 버스 사이의 데이터 전송은 channel selector(채널 선택기) 가 관리한다.
인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 역할 하는 신호이다.
CPU가 요청한 작업을 완료했을 때, 키보드로 데이터를 입력받았을 때, 네트워크 카드에 새로운 데이터가 도착했을 때, 하드웨어에 이상이 발생했을 때 등 다양한 경우에 인터럽트가 발생한다.
외부 인터럽트: 입출력장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류 때문에 발생하는 인터럽트를 포함하므로 하드웨어 인터럽트라고도 부른다. IRQ라는 고유의 인터럽트를 부여하여 어떤 장치에서 인터럽트가 발생했는지 파악한다.
내부 인터럽트: 숫자를 0으로 나누거나 자신의 주소공간을 벗어나서 작업하는 것과 같이 프로세스의 오류와 관련된 인터럽트는 내부 인터럽트이다. 내부 인터럽트는 프로세스의 잘못이나 예상치 못한 문제에 때문에 발생하는 인터럽트 이므로 예외상황 인터럽트라고도 부른다.
반면, 사용자가 직접 발생 시키는 인터럽트도 있는데 ctrl + c 와 같은 경우이다. 사용자의 의지로 발생시키는 자발적 인터럽트를 시그널이라고 부른다.
종류 | 특징 | 비고 |
외부 인터럽트 | 입출력 및 하드웨어 관련 인터럽트 | 주변장치 변화, 하드웨어 이상 |
내부 인터럽트 | 프로세스의 오류로 발생하는 인터럽트 | 예외 상황 인터럽트 |
시그널 | 사용자의 요청으로 발생하는 인터럽트 | 자발적 인터럽트 |
인터럽트 벡터: 여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하지기 위해 사용하는 자료 구조. 벡터 값이 1이면 인터럽트 발생!
버퍼: 버퍼는 속도가 다른 두 장치의 속도 차이를 완화하는 역할을 한다. 느린 장치를 통해 들어오는 데이터를 버퍼에 모아 한꺼번에 이동하면 효율적이다. 하드디스크나 CD-ROM 등 대부분의 입출력장치는 버퍼를 사용하여 느린 속도를 보완한다. 커널이 입출력 장치로 보내야 할 데이터를 버퍼에 담아 놓으면 입출력 제어기가 커널 버퍼에서 입출력 장치로 데이터를 보낸다.
sector(섹터): 하드디스크의 물리적 개념으로 가장 작은 저장 단위이다.
track(트랙): 플레터에서 회전축을 중심으로 데이터가 기록되는 동심원, 즉 동일한 동심원상에 있는 섹터의 집합을 말한다.
seek time(탐색 시간): 하드디스크의 특징 섹터에 저장된 데이터를 읽거나 쓰려면 그 섹터가 있는 트랙까지 헤드가 이동해야 한다. 이처럼 헤드가 현재 위치에서 그 트랙까지 이동하는 데 걸리는 시간을 탐색시간이라고 한다.
rotational latency time(회전 지연 시간): 특정 트랙까지 이동한 헤드는 플래터가 회전하여 원하는 섹터를 만날 때까지 기다린다. 이처럼 원하는 섹터를 만날 때까지 회전하는 데 걸리는 시간을 표현한다.
transmisstion time(전송 시간): 헤드는 원하는 섹터에 있는 데이터를 읽어 전송하는데, 이때 걸리는 시간을 표현한다.
데이터 전송 시간 = 탐색시간 + 회전지연시간 + 전송시간
Disk scheduling (디스크 스케줄링): 트랙의 이동을 최소화하여 이 탐색 시간을 줄이는데 목적이 있다.
FCFS 디스크 스케줄링: 요청이 들어온 트랙 순서대로 서비스한다.
SSTF 디스크 스케줄링: 현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스한다. 만약 다음에 서비스할 두 트랙의 거리가 같다면 먼저 요청 받은 트랙을 서비스 한다. 효율성이 좋지만, 아사현상이 발생 할 수 있다.
블록 SSTF 디스크 스케줄링: 현재 트랙에서 가장 먼 트랙을 블록의 끝으로 이동한다. 따라서 멀리 있는 트랙도 몇 번만 양보하면 서비스 받을 수 있다. 이는 SSTF 디스크 스케줄링에 에이징을 적용한 것이다.
SCAN 디스크 스케줄링: 공평성 위배 문제를 완화하기 위해 만들어진 기법, 헤드가 한 방향으로만 움직이면서 서비스한다. 헤드가 움직이기 시작하면 맨 마지막 트랙에 도착할 때까지 뒤돌아가지 않고 계속 한 방향으로 전진한다.
C-SCAN 디스크 스케줄링: SCAN도 공평성에 위배가 된다. 그래서 바깥쪽에 공평성을 위해 끝에 도달했을 경우 반대 방향으로 이동할 때 중간 작업 없이 반대 끝 방향으로 이동한다.
LOOK 디스크 스케줄링: 더 이상 서비스할 트랙이 없으면 헤드가 끝까지 가지 않고 중간에서 방향을 바꾼다.
C-LOOK 디스크 스케줄링: 중간에서 방향을 바꾸는 경우에 중간 작업 없이 끝 방향으로 이동한다.
RAID: 자동으로 백업을 하고 장애가 발생하면 이를 복구하는 시스템으로 '레이드'라고 부른다. 메모리가 아닌 값싼 디스크를 이용하기 때문에 이런 이름이 붙었다.
'운영체제_스터디' 카테고리의 다른 글
#DAY5 물리 메모리 관리 (0) | 2021.11.26 |
---|---|
#DAY4 교착상태 (0) | 2021.11.16 |
# DAY3 프로세스 동기화 (0) | 2021.11.12 |