본문 바로가기

CS 리마인드/운영체제

[운영체제] 1. 서론

 본 내용들은 전공수업으로 배운 내용들을 스스로 리마인드하기 위한 목적으로 작성되었으며, 누군가에게 지식을 전달하기 위한 목적으로 작성한 것이 아닙니다. 대부분의 내용은 제가 수강했던 전공수업 및 Operating System Concepts, 10th Edition에 근거하고 있습니다. 

 

1. OS의 정의

 

 뚜렷하게 통용되는 정의는 없다. 응용 프로그램, 유저와 하드웨어 사이의 중재자로서, 핵심적인 기능을 하는 커널부터 함께 포함된 시스템 프로그램, 응용 프로그램, 미들웨어 등에 이르기까지 동봉된 모든 것을 지칭한다. 

 

2. 컴퓨터 시스템 구조의 개요

 

2.1 컴퓨터 시스템의 조직과 동작

 

- 하나 이상의 CPU와 Device controller들이 Shared memory에 접근할 수 있는 공용 버스로 연결되어 있으며, 이들은 메모리 사이클을 두고 경쟁하며 동시에(concurrently) 실행된다. 최근에는 이런 시스템 버스 대신 핀포인트 연결을 이용하는 경우도 많다.

-  I/O 디바이스와 CPU는 동시에 실행될 수 있다.

- 각각의 Device controller들은 개별적인 디바이스를 담당하며, 로컬 버퍼를 가지고 있다. OS는 Device driver를 통해 이들을 관리한다.

- CPU는 데이터를 메인 메모리와 로컬 버퍼 사이에서 이동시킬 수 있다.

- Device controller는 인터럽트(Interrupt)를 발생시켜 CPU에게 I/O 작업의 종료를 알린다.

 

2.2 인터럽트

 

- 전달된 인터럽트는 일반적으로 ISR(Interrupt Service Routine)에 의해 처리된다. 모든 서비스 루틴의 주소는 Interrupt vector에 포함되어 있다.

- 인터럽트가 발생하면 OS는 기존 작업을 저장한 뒤(Program Counter를 비롯한 각종 레지스터의 상태 등), 중단하고 ISR을 실행한다.

- OS는 기본적으로 I/O를 이 Interrupt driven 방식으로 처리하게 되며, trap이나 exception과 같은 소프트웨어가 생성하는 인터럽트도 발생할 수 있다.(에러나 유저의 요청 등으로 인해)

 

3. 저장 구조(Storage Structure)

 

3.1 Storage Structure

 

- 메인 메모리: CPU가 직접 접근 가능한 유일한 대용량 저장소. Random Access, Volatile 등의 특징을 가지고 있으며 일반적으로 DRAM(Dynamic Random-access Memory) 형태이다.- 보조 기억장치(Secondary storage): 주 기억장치인 메인 메모리를 보조하는 대용량의 nonvolatile 저장 장치. HDD, NVM 등. 

- 레지스터 < 캐시 < 메인 메모리 < NVM < HDD < Optical Disk < Magnetic tapes로 갈수록 저장 용량은 크고 액세스 타임은 작아진다. 접근하는데 걸리는 CPU 사이클이 레지스터가 1 사이클, 캐시가 4~5 사이클, 메인 메모리가 100 사이클, HDD가 10억 사이클 가량.

- 현대 컴퓨터의 메모리들은 DMA(Direct Memory Access)를 활용해 인터럽트의 빈도를 줄이고 더 빠른 I/O 데이터 송수신을 가능하게 한다.

 

4. 컴퓨터 시스템 아키텍처

 

- 대부분의 시스템이 단일 범용 프로세서를 사용하며, 특수 목적 프로세서들 또한 포함하고 있다.

- 현대에는 멀티 프로세서의 사용과 중요성이 증가하고 있다(병렬 시스템 등). 이는 처리량 증가, 규모의 경제, 신뢰성(reliability: falut tolerance 등의 차원에서) 증가 등의 측면에서 이득이 있다.

- 각각의 프로세서가 특정 task에 특수화되어있는 Asymmetric Multiprocessing과 각각의 프로세서가 모든 task를 범용적으로 하는 Symmetric Multiprocessing(SMP), 두 가지 타입이 있다. 후자가 보다 일반적이다.

- 멀티 코어는 또 다른 개념으로, 프로세서 내에 코어가 여러 개라는 의미이다. 즉, 여러 개의 칩셋을 보유한 것이며, 칩셋 내에는 레지스터와 L1 캐시 등이 존재한다.

- Non-Uniform Memory Access System(NUMA): 멀티 프로세서, 멀티 코어 시스템의 확장성은 그리 좋지 않은데(메모리에 대한 경합 상태 때문), 메모리에 액세스 하는 시스템 버스에 대한 bottleneck을 줄이기 위해 나온 개념이다.

 CPU가 로컬 메모리에 액세스 할 때 속도가 빠르고, shared system interconnect로 연결되어 있어 bottleneck이 발생하지 않는다. 대신에 다른 CPU의 로컬 메모리에 액세스 할 때 성능 저하가 있기 때문에, 신중한 CPU 스케줄링 및 메모리 관리가 필요하다.

- 클러스터 시스템: 네트워크에 있는 여러 시스템들을 하나의 거대한 시스템으로 만드는 것.

 

5. OS 동작

 

- 부팅과 실행

1. Bootstrap 프로그램 동작: 시스템을 초기화하고, 커널을 로드하기 위한 단순한 코드. 일반적으로 ROM 또는 EEPROM에 저장되어 있음.

2. 커널 로딩

3. System daemons 시작(커널 외부에서 제공되는 서비스, OS의 백그라운드 서비스 개념): 커널이 실행 중일 때 항상 실행되며, 예를 들어, systemmd는 Linux kernel에서 가장 처음 로드되는 system daemon이고 이 daemon은 다른 daemon들을 시작함.

4. 커널이 interrupt driven 방식으로 동작

- 멀티 프로그래밍(Batch system): 한 번에 여러 개의 프로그램을 실행하는 것을 지원하는 것. CPU와 I/O 디바이스를 바쁜 상태로 유지하기 위함이며, 메모리에 전체 작업의 부분 집합들이 올라가 있고 작업 스케줄링을 통해 실행될 작업이 선택됨.

- 멀티 태스킹(Timesharing): 여러 개의 프로그램이 동시에 실행되는 것처럼 보이도록 하는 것. Batch system의 logical한 확장이고 CPU는 각각의 작업을 빈번하게 스위칭하여, 반응성을 높임.

- 듀얼 모드 동작: User 모드와 Kernel mode를 나누어 OS 스스로와 시스템 컴포넌트들을 보호하는 개념. 보통 하드웨어에 의해 제공되는 mode bit를 확인하게 된다. 이를 통해 privileged한 명령어들은 커널 모드에서만 실행될 수 있게 한다.

- 타이머: 무한 루프 등의 리소스 낭비를 막기 위한 타이머가 존재한다. 특정 시간이 지나면 인터럽트를 발생시키며, 카운터는 물리적인 시간 측정에 의해 감소한다. 카운터를 설정하는 것은 privileged instruction이며, 카운터가 0이 된 프로세스는 다시 제어권을 얻거나 종료되게 된다.

 

6. 리소스 관리

 

6.1 프로세스 관리

 

- 프로세스는 실행 중인 프로그램이며, 작업을 위해 CPU, 메모리, I/O, 초기 데이터 등의 리소스를 요구한다. 그래서 프로세스는 종료될 때 리소스를 반납하도록 할 필요가 있다.

- 싱글 쓰레드 프로세스는 PC(program counter)가 하나만 있어도 되지만, 멀티 쓰레드 프로세스는 쓰레드 당 PC를 하나씩 가져야 한다.

- OS는 프로세스 관리를 위해 생성 및 제거, 프로세스 및 쓰레드 스케줄링, 프로세스의 중단과 재개, 프로세스 동기화 메커니즘 제공, 프로세스 통신 메커니즘 제공, 데드락 해결 메커니즘 제공 등에 대한 책임이 있다.

 

6.2 메모리 관리

 

- 프로그램이 실행되기 위해서는 명령어들의 일부 혹은 전체가 메모리에 올라와야 한다.

- 프로그램이 필요로 하는 데이터들 또한 메모리에 올라와야 한다.

- 메모리 관리는 무엇이 메모리에 언제 올라갈지 결정하는 것이다.

- 메모리의 각 부분이 누구에 의해 사용되고 있는지 트랙을 유지해야 하고, 어느 것이 메모리에 올라가고 내려올지 결정해야 하며, 필요한 메모리 공간을 할당 및 해제할 수 있어야 한다.

 

6.3 파일 시스템 관리

 

- OS는 저장소에 대한 정보를 균일하고, 논리적인 형태로 보여줄 수 있어야 한다. 이를 위해 필요한 것이 포맷 형식(NTFS, FAT32 등)이다. 

- 파일은 보통 디렉토리 형태로 조직화되며, 대부분의 시스템은 누가 어떤 파일에 접근할 수 있는지 제어한다.

- 파일 및 디렉토리의 생성 및 삭제, secondary storage에 매핑, non-volatile storage에 백업 등의 기능을 제공해야 한다.

- 대용량 저장소 관리는 이와는 조금 다른 개념으로, 마운팅/언마운팅, 빈 공간 관리, 저장소 할당, 디스크 스케줄링, 파티셔닝 등의 기능을 말한다.

 

6.4 캐시 관리

 

- 컴퓨터의 많은 레벨에서 동작하는 중요한 원칙이다.(하드웨어부터 소프트웨어에 이르기까지)

- 정보는 느린 저장장치에서 빠른 저장장치로 복사되어 이용되며, 이는 자동적으로 수행되어야 한다.

- 빠른 저장장치에 속하는 캐시는 정보가 존재하는지 처음으로 체크되는 공간이며, 작은 공간이다. locality 등을 고려하여 높은 캐시히트율을 달성해야 한다. 

 

6.5 I/O 서브 시스템

 

- OS의 목적 중 하나로, 유저가 하드웨어 디바이스에 대한 세부사항을 모르는 상태로 사용할 수 있게 해 준다.

- OS는 I/O에 대한 처리를 해줄 수 있어야 하며, buffering, caching, spooling 등의 메모리 관리 및 공용 디바이스 드라이버 인터페이스, 특정 하드웨어 디바이스를 위한 드라이버 등을 제공해야 한다.

 

7. 보안과 보호

 

- 보안(Security): 내부 및 외부 공격으로부터 시스템을 방어하는 것

- 보호(Protection): OS에서 정의한 리소스에 대한 프로세스 또는 사용자의 액세스를 제어하는 모든 메커니즘, 내부 구성요소 간 오류 제어

 

8. 가상화

 

- Emulation: 다른 타입의 CPU를 위해 생성된 프로그램을 기존의 리소스나 하드웨어를 이용하지 않고, 소프트웨어적으로 구현해 시스템을 돌릴 수 있게 하는 것. 당연히 성능 이슈가 발생하며, instructions에 대한 번역이라고 볼 수 있음.

- Virtualization: 다른 OS를 기존 리소스나 하드웨어 일부를 이용해 동시에 실행시키는 것. VMM을 통해 다양한 가상화 서비스들을 제공.

- 최근에는 도커와 같은 컨테이너 엔진 위에서 컨테이너들을 구동하는 컨테이너 아키텍처도 사용.

'CS 리마인드 > 운영체제' 카테고리의 다른 글

[운영체제] 5. CPU 스케줄링  (0) 2024.12.09
[운영체제] 4. 스레드  (0) 2024.12.03
[운영체제] 3. 프로세스  (3) 2024.12.01
[운영체제] 2. OS 서비스  (1) 2024.03.29