[운영체제] OS란 무엇인가
OS란 무엇일까
OS란 Hardware Interface이다.
OS는 사용자와 프로그램이 컴퓨터 자원을 사용할 수 있도록 중개하는 시스템 소프트웨어입니다.
사용자에게는 User Interface를 제공하며, Kernel이라는 프로그램을 통해 프로그램의 하드웨어 사용을 관리합니다.
(1) User Interface
OS는 사람이 컴퓨터를 조작할 수 있도록 User Interface; UI를 제공합니다.
- GUI ( Graphical User Interface ) : 그래픽을 이용하여 직관적으로 컴퓨터를 조작하는 인터페이스이다. Windows, MacOS 등 대중적인 운영체제에서 주로 사용합니다.
- CLI ( Command Line Interface) : 명령어를 통해 컴퓨터를 조작하는 인터페이스이다. 전문적인 조작이 가능하며, 주로 Unix, Linux 등의 개발 친화적인 운영체제에서 주로 사용합니다.
- Touchscreen Interface : Android, IOS 등 주로 휴대용 전자기기에서 사용하는 터치형 인터페이스입니다.
(2) Kernel
Kernel은 프로그램의 하드웨어 사용을 관리하는 프로그램 입니다. 또한, 사용자 프로그램에서 발생하는 오류를 처리하고, Privilliged instructions을 보호합니다.
커널 구조
1) Monolithic structure
모든 기능이 kernel에 존재하는 형태
장점 : 성능이 좋음
단점 : 무겁고, 새로운 기능을 추가할 때마다 recompile이 필요함
2) Microkernel System structure
필수적이지 않은 기능은 user-level로 배치하여 kernel 을 가볍게 만든 형태
message passing을 이용하여 프로그램간 소통함
장점 : kernel이 가볍고 확장이 쉬움
단점 : 잦은 system call로 인해 느림
3) Loadable Kernel Module (LKM)
현대적인 OS에서 주로 채용하는 구조이며, 필요한 기능을 kernel에 로드하여 사용하는 형태
장점 : 확장성이 좋고 messae passing이 필요없어 빠름
컴퓨터 시스템의 구조
OS가 어떻게 일하는지 알기 위해선 먼저, 컴퓨터 시스템의 구조에 대한 이해가 필요합니다.
컴퓨터는 CPU, Main Memory, Secondary Storage, I/O Device, Mode bit, Interrupt line으로 구성되어 있으며, 각 하드웨어는 메인보드 상에서 bus라는 물리적인 통로를 통해 소통합니다.
(1) CPU
- CPU는 코어와 여러 레벨의 Cache로 구성되어 있습니다.
- 코어는 Register와 L1 Cache로 구성되어 있으며, 한 코어 당 하나의 명령만 실행할 수 있습니다.
- Register는 명령을 수행하는 부품이며, Cache는 데이터를 임시 저장하는 부품입니다.
또한, CPU는 코어의 개수에 따라 크게 두 가지로 나눌 수 있습니다.
1. Single core processor
싱글 코어 프로세서는 1개의 코어를 가지고 있으며, 코어가 한 개이므로 한 번에 하나의 명령을 수행할 수 있습니다.
2. Multicore processor
멀티 코어 프로세서는 2개 이상의 코어를 가지고 있으며, 동시에 여러 작업을 처리 수 있어 대용량 작업에 더 유리합니다. 멀티 코어를 사용하는 과정에서 오버 헤드가 발생하기 때문에, 코어의 수가 많아진다고 해서 무작정 빨라지지는 않습니다.
(2) Main Memory (주 기억 장치)
- CPU가 직접 접근하여 데이터를 읽고 쓰는 빠른 메모리입니다.
- DRAM과 SRAM이 있으며 보통 DRAM을 사용합니다.
- 휘발성 메모리이기 때문에 전원이 꺼지면 저장된 데이터가 사라집니다.
- 운영 체제를 포함한 모든 프로그램은 주 기억 장치에 할당되어야 사용할 수 있습니다.
Random Access의 의미
데이터가 어떤 위치에 있든 같은 시간안에 찾는 방식입니다.
하드 디스크가 있음에도 RAM을 사용하는 이유가 무엇일까요?
CPU는 빠른 속도로 데이터를 처리하지만, HDD는 기계적 구조로 인해 데이터 읽기/쓰기 속도가 매우 느립니다. 만약 CPU가 HDD에서 직접 데이터를 주고받는다면, CPU의 처리 속도가 HDD 속도에 의해 크게 저하될 것입니다. 이를 해결하기 위해 CPU보다는 느리지만 HDD보다는 빠른 메인 메모리가 HDD의 데이터를 캐싱함으로써 문제를 개선합니다.
(3) Second Memory (보조 기억 장치)
- 주기억 장치보다 느리지만 저렴하고 대용량의 저장 장치입니다.
- 하드 디스크, SSD가 여기에 속합니다.
- 비휘발성 메모리이기 때문에 전원이 꺼져도 데이터가 유지됩니다.
(4) I/O Device (입출력 장치)
I/O Device는 Input/Output Device의 약자로, 컴퓨터와 외부 환경 사이의 데이터 입출력을 담당하는 장치들을 의미합니다. 키보드, 마우스, HDD, 등이 여기에 속합니다.
(5) Mode bit
어떤 프로그램이 CPU를 사용하고 있는 경우, 해당 CPU의 사용 권한은 그 프로그램에게 넘어갑니다. 만약 개발자의 실수나 악의적인 의도로 해당 프로그램이 컴퓨터를 망가뜨리려고 할 때, OS는 어떻게 컴퓨터를 보호할 수 있을까요?
Mode bit이란 컴퓨터를 보호하기 위한 하드웨어로서, bit를 통해 CPU의 사용자를 구분합니다.
0 : kernel mode
Privilliged instructions을 사용할 수 있습니다.
1 : user mode
Privilliged instructions을 사용할 수 없습니다.
(6) Interrupt
만약, CPU가 사용 중일 때 다른 프로그램의 명령을 수행해야하는 경우 어떻게 처리할 수 있을까요?
어떤 프로그램이 Interrupt를 발생시키면 CPU는 그 즉시 현재 수행하던 명령을 멈추고 Interrupt vector를 확인하여 해당 Interrupt의 Service routine을 실행합니다.
또한, Interrupt에는 두 가지 종류가 있습니다.
Hardware Interrupt
Hardware I/O가 발생시킨 interrupt를 의미합니다.
Software Interrupt (=traps)
Software가 발생시킨 interrupt를 의미합니다.
System call과 exception이 있습니다.
System call
만약 어떤 프로그램이 Privilliged instruction을 실행해야 한다면 어떻게 처리할 수 있을까요?
System Call이란 사용자 프로그램이 Privilliged instruction을 실행하기 위해 전달하는 interrupt를 의미합니다.
즉, Privilliged instruction interface라고 정의할 수 있습니다.
Multitasking
CPU는 한 번에 하나의 작업만 수행할 수 있습니다. 하지만 우리는 컴퓨터를 사용할 때 다양한 작업을 동시에 실행합니다. 이것이 어떻게 가능한 것일까요?
Multitasking이란 다양한 프로그램의 작업을 빠른 속도로 번갈아 실행함으로써 마치 동시에 프로그램들이 동작하고 있는 것처럼 보이게 만드는 기술입니다.
Multitasking의 장점
1. CPU Utilization : CPU의 사용률이 증가합니다.
2. Timesharing : 많은 프로그램 CPU의 자원을 사용할 수 있습니다.
다양한 메모리를 사용하는 이유는 무엇일까요?
다양한 메모리를 사용함으로 최소한의 비용으로 최대한의 용량과 속도를 누리기 위함입니다.
이것이 가능한 이유는 Register부터 Second memory까지, 용량이 적고 속도가 빠른 메모리가 용량이 크고 속도가 느린 저장장치의 정보를 임시로 저장하고 있기 때문입니다. 이를 캐싱이라고 부르며, 이러한 캐싱 개념은 컴퓨터 시스템뿐만 아니라 다이나믹 프로그래밍과 같은 알고리즘에서도 활용됩니다.
메모리의 종류 : Register, L1 Cache, L2 Cache, L3 Cache, RAM, Second memory
메모리의 속도&비용 : Register > L1 Cache > L2 Cache > L3 Cache > RAM > Second memory
메모리의 용량 : Register < L1 Cache < L2 Cache < L3 Cache < RAM < Second memory
정리
- OS란 Hardware Interface이다.
- OS가 관리하는 자원에는 CPU, Main Memory, Second Memory, I/O Device가 있으며, 메인보드 상에 bus를 통해 연결되어 있다.
- 최소한의 비용으로 최대한의 용량과 속도를 얻기 위해 Register부터 Secondary Memory까지 단계별로 캐싱 전략을 활용하고 있다.