컴퓨터 시스템
운영체제는 결국 하드웨어와 관련되어 있으므로 이를 이해할 필요가 있다.
먼저 컴퓨터 시스템에 대해 알아보고,
컴퓨터 시스템의 구성
현대의 컴퓨터 시스템을 그림으로 그려보자.
graph TD
memory -->|bus| cpu
memory -->|bus| disk_controller
disk_controller --> 디스크
memory -->|bus| usb_controller
usb_controller --> 마우스
usb_controller --> 키보드
usb_controller --> 프린터
memory -->|bus| graphic_adapter
graphic_adapter --> 모니터
CPU와 수많은 device controller가 있고, 이를 bus로 연결하고 있다. 각 device controller는 특정 장치를 담당한다.
- 운영체제는 device controller마다 장치 드라이버가 있다.
- 장치 드라이버는 장치에 대한 일관된 인터페이스를 제공한다.
인터럽트
컴퓨터 작업이 이뤄지는 방식을 살펴보자.
-
키보드를 친다.
-
데이터는 다음과 같은 방식으로 이동한다.
키보드 → 장치 컨트롤러 속 버퍼 (이걸 장치 드라이버가 해줌)
-
장치 컨트롤러 → cpu에게 인터럽트를 검.
-
cpu는 인터럽트 핸들러에게 제어를 넘김
-
인터럽트 핸들러가 데이터 처리
-
cpu는 인터럽트로 중단된 작업 처리
요즘의 운영체제는 좀 더 향상된 인터럽트 처리를 위해, 인터럽트 벡터라는 것을 사용한다.
- 이를 통해 중요한 인터럽트를 먼저 처리할 수 있다.
- ex) 나눗셈 에러 : 0 / 중단점 : 3
저장장치
휘발성 저장장치 = RAM (랜덤 엑세스 메모리).
- 단순히 메모리라고 하면, 이걸 의미.
- 빠르나, 너무 용량이 작고, 전원이 없으면 데이터가 날라간다.
비휘발성 저장장치 (NVS)
- SSD, 플래시 메모리, FRAM 등등
- 좀 느리지만 전원이 꺼져도 데이터가 보존된다.
입출력구조
인터럽트를 통한 입출력은 대량 데이터를 옮길 때 오버헤드를 일으킬 수 있다.
따라서, 이를 위해 직접 메모리 액세스(DMA)가 사용된다.
운영체제 코드의 상당한 부분이 시스템의 안정성과 성능에 대한 중요성,
장치의 다양한 특성으로 인해 입출력 관리에 할애.
코어와 멀티코어
코어란?
-
명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소
-
코어로 CPU는 범용 명령어 세트를 실행할 수 있다.
-
코어 1개 : 싱글 프로세서
코어 n개 : 멀티 프로세서
멀티코어
CPU가 여러개 있는 프로세서.
-
SMP : 대칭 멀티프로세싱
프로세서가 두 개 이상 있고, 메인 메모리에 이를 병렬적으로 연결
때에 따라서 비효율적일 수 있음.
-
다중 코어
프로세서 하나에 cpu를 여러 개 넣는 방식.
L2 캐시를 이용해 프로세서 안에서 cpu끼리 통신한다.
다중 프로세서의 단점인 병목 처리를 해결하기 위해, 각 CPU 간 작고 빠른
로컬 버스를 제공하는 방식이 존재한다. 이를 NUMA(non-uniform memory
access)라고 한다.
클러스터형 시스템
둘 이상의 컴퓨터 시스템을 결합해서 만든 시스템.
- 높은 가용성 제공
- 비대칭형 : 일부만 응용 프로그램을 실행
- 대칭형 : 모두가 다 실행.
- 하둡이 대표적인 예시