운영체제(Operating System)
- 컴퓨터 하드웨어를 관리하는 소프트웨어
컴퓨터 시스템은 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분할 수 있음
일반적으로 하나 이상의 CPU와 버스(Bus, I/O 장치 컨트롤러, 디스크 컨트롤러, CPU 등이 메모리에 접근할 수 있도록 연결해 주는 선), 여러 장치 컨트롤러로 구성되어 있음
운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 있음
*장치 드라이버: 장치 컨트롤러의 작동을 파악해 장치에 대한 일관된 인터페이스를 운영체제에 제공
컴퓨터 시스템의 구성
1. 인터럽트
인터럽트: CPU가 특정 작업을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용하는 기능
인터럽트 핸들러가 관리함
<CPU의 인터럽트 처리 과정>
인터럽트 받음 -> 수행하고 있던 위치를 저장 -> 인터럽트 실행 -> 인터럽트를 완료하면 저장된 위치에서 원래 하던 일 재개
- Polling mode: CPU가 아무것도 하지 않고 다른 기기에 요청한 작업이 끝날 때까지 기다리기(busy waiting: 절대 권장되지 않는 방식, CPU는 자기가 요청한 작업이 끝났는지 확인하기만을 반복함)
- Interrupt: 다른 거 하다가 급하게 할 일 있으면 알림 받고 요청한 작업 끝났으면 알림 받고 - CPU가 일하는 시간이 늘어남
운영체제에서는 무조건 CPU에게 일을 많이 시키는 것이 중요하다! CPU가 노는 시간이 있으면 안 됨
2. 저장 장치 구조
CPU가 프로그램을 실행하려면(=작업을 수행하려면) 명령을 메모리에 올려야 함
메인 메모리(Random Access Memory, RAM)는 용량이 작고 휘발성(컴퓨터가 꺼지면 내용이 사라짐)이기 때문에 보조저장장치가 필요함 -> HDD(Hard Disk Drive) 사용
메모리 계층: 위로 갈수록 1. 작고 2. 빠르고 3. 빠르게 휘발됨
3. 입출력 구조
시스템은 범용 버스를 통해 데이터를 교환하는, 여러 장치로 구성된 범용 컴퓨터
직접 메모리 액세스(DMA): 대량 데이터 이동으로 인한 오버헤드 유발 방지
장치 컨트롤러는 CPU 개입 없이 기본 환경(장치 버퍼/포인터/입출력 카운트 등) 세팅 후 메모리<->버퍼 간 데이터 전송
장치 컨트롤러가 전송 작업을 하는 동안 CPU는 다른 작업 수행 가능(성능 대폭 향상)
- 예시: 데이터가 필요한 주변 기기에서, 직접 해당 기기의 메모리에 접근해서(메모리는 프로그램별로 논리적으로 분리되어 있음) 필요한 정보를 가져옴
컴퓨터 시스템의 구조
- 단일 코어(Single-Processor)
- 멀티 코어(Multi-Processor)
- 코어가 많으면 당연히 처리량이 증가함
- 여러 개의 코어를 가지는 칩이 하나의 코어를 가진 여러 개의 코어보다 전력을 덜 사용(칩 내 통신이 칩 간 통신보다 빠름)
- NUMA: Non-Uniform Memory Access
- 메모리에 접근하는 시간이 CPU와 메모리의 상대적인 위치에 따라 달라지는 컴퓨터 메모리 설계 방법
- 각 CPU는 메모리의 일부를 자신의 로컬 메모리(Local Memory)로 가지고 있음
- 자신의 로컬 메모리에 접근하는 속도는 원격 메모리(다른 CPU의 로컬 메모리)에 접근하는 속도보다 훨씬 빠름
- 클러스터형 시스템
둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성
높은 가용성 제공
운영체제의 작동
Hadoop: 클러스터형 시스템에서 빅데이터의 분산 처리에 사용되는 오픈 소스 프레임워크
다중 프로그래밍: CPU가 적어도 항상 한 개의 프로그램을 실행할 수 있도록 CPU 이용률을 높인 것
다중 태스킹: 다중 프로그래밍의 논리적 확장(여러 프로세스를 ms(밀리세크) 단위로 전환하며 실행해서 동시에 여러 개를 처리하는 것처럼 보이게 함)
운영체제와 사용자가 같은 하드웨어와 소프트웨어 자원을 공유하므로 자원이 잘못 사용되는 일이 없어야 함
- 사용자 모드: 유저 애플리케이션을 실행하는 일반 모드, 자원/명령어의 접근/실행 제한
- 커널 모드: 하드웨어 직접 접근 가능, 모든 명령어 실행 가능, 사용자로부터 시스템 콜을 받으면 실행