운영체제란?
운영체제란 컴퓨터가 시스템 자원(CPU,메모리,I/O 디자이스)의 자원을 효율적으로 관리해주면서 동시에 여러 애플리케이션이 유연하게 동작할 수 있도록 환경을 제공해주는 소프트웨어다.
역할
1. CPU 스케줄링 프로세스 관리
CPU 소유권을 어떤 프로세스에 할당할 지 , 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리한다.
2. 메모리 관리
한정된 메모리를 어떤 프로세스에 할당해야 하는 지 관리합니다.
3. 디스크 파일 관리
디스크 파일을 어떤 방법으로 보관할 지 관리합니다.
4. I/O 디바이스 관리
I/O 디바이스들인 마우스와 키보드, 그리고 컴퓨터와의 데이터를 주고받는 것을 관리합니다.
운영체제의 부팅과정

1. 전원 켜기
메인 보드에 전력이 들어오고 이후 메인보드에 장착된 장치들 (CPU, 메모리, 디스크)에도 전력이 공급된다.
2. ROM(Read Only Memory) 동작
ROM은 컴퓨터 전원 공급이 끊겨도 데이터들이 사라지지 않고 저장되는 비휘발성 메모리이다.
ROM안에는 POST(Power On Self Test)와 부트로더(Boot Loader)가 저장되어 있다.
POST
POST는 컴퓨터 전원이 켜지면 가장 먼저 실행되는 프로그램으로 컴퓨터에 이상이 있는지 체크하는 프로그램이다. 부트로더(Boot Loader)는 하드디스크에 저장되어 있는 OS 프로그램을 가져와서 RAM에 넘겨준다.
부트로더(Boot Loader)
POST 작업이 끝나면 실행된다. 부트 로더는 하드디스크에 저장되어 있는 운영체제를 찾아서 메인 메모리(RAM)에 가지고 온다. 이 과정을 (운영체제를 메모리에 적재하는) 부팅, 부트스트래핑이라고 한다.
운영체제의 구조
운영체제는 DOS(Disk Oriented System) 시절부터 꾸준히 발전해왔다. 기본적으로 하나의 CPU는 하나의 작업(Interrupt)만 처리할 수 있다. 따라서 예전에는 하나의 작업이 끝날 때까지 다른 작업은 대기만 하고 있어서 효율이 낮았다.
- 작업 1, 작업 2를 처리해야 한다.
- 작업 1이 I/O 자원을 사용한다. 작업 2 대기, CPU 자원 대기
- 작업 1이 CPU 자원을 사용한다. 작업 2 대기, I/O 자원 대기
- 작업 2가 I/O 자원을 사용한다. CPU 자원 대기
- 작업 2가 CPU 자원을 사용한다. I/O 자원 대기
멀티프로그래밍
이러한 문제를 해결하기 위해 생긴 방법론이 멀티 프로그래밍 원리다. 멀티 프로그래밍의 기본 개념은 입출력을 수행하고 있는 경우, 다른 작업에 CPU를 할당해서 처리하도록 한다. 반대로 CPU가 작업을 하고 있는 경우, 입출력 장치들을 대기 상태로 만들어서 입출력이 필요한 작업에게 입출력 리소스를 할당한다.
- 작업 1, 작업 2를 처리해야한다.
- 작업 1이 CPU 자원을 사용한다. 작업 2가 I/O 자원을 사용한다.
- 작업 1이 I/O 자원을 사용한다. 작업 2가 CPU 자원을 사용한다.
멀티 태스킹
기술이 발전하면서 프로세서의 처리 속도가 더욱 빨라졌는데 역설적으로 C프로세서의 낭비가 더욱 커졌다. 그 이유는 프로세서의 처리 속도의 발전 속도를 입출력 장치가 따라가지 못해서 프로세서의 낭비가 더욱 커지게 된다.
- 작업 1, 작업 2를 처리해야 한다.
- 작업 1에게 CPU 자원 할당, 작업 2에게 I/O 자원 할당
- 작업 1를 완료하여 CPU 대기, 작업 2 처리 중
(이때, 작업 2가 처리될 때까지 CPU는 대기 상태여서 자원 낭비 발생)
이러한 문제를 해결하기 위해 나온 개념이 멀티 태스킹(Multi-tasking)이다. 멀티 태스킹은 각각에 작업들에게 자원 할당 시간을 정해줘서 시간이 지나면 다른 작업들에게 자원을 넘겨준다. 이때, 각 자원들에게 시간을 할당하는 것이 스케쥴링이고 Job 스케쥴링과 CPU 스케쥴링이 있다.
운영체제의 위치

사용자 프로그램(Application)은 특정 운영체제에 맞춰서 만든다. 그러므로 한 애플리케이션은 서로 다른 운영체제에서 수행할 수 없다. (하드웨어가 같은 것은 전혀 상관이 없다.) 예를 들면 Windows에서 수행하는 프로그램을 그대로 Linux에 옮기면 수행되지 않는다.
애플리케이션은 위의 그림과 같이 운영체제 위에서 수행한다. 즉, 하드웨어 자원을 직접적으로 사용하지 않고 운영체제가 제공하는 자원만을 사용할 수 있다.
운영체제의 원리
운영체제는 interrupt-driven방식으로 사용자의 요청(Event 혹은 Interrupt)이 발생하면 운영체제는 적절하게 자원(CPU, I/O, 메모리 등)을 분배하여 그 요청을 처리하는 구조이다.

인터럽트(Interrupt)
컴퓨터가 부팅이 되면 OS 프로그램을 실행한 후 사용자의 입력 이벤트를 기다리는 상태를 의미한다.이는 CPU가 멈추는 이벤트이다. 즉, 현재 실행중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하기 위해 발생하는 명령이다. 다중 프로그래밍에 필수 인터럽트가 발생하면 OS는 해당 명령어의 주소를 기억한다. 이 과정이 끝나면 해당 주소로 돌아가 다음 명령을 수행하거나 대기 상태로 들어간다.
H/W 인터럽트 : I/O, 메모리, CPU와 관련된 interrupt이고 시스템 버스를 통해 전달된다.
S/W 인터럽트 : 프로그램이 실행되다가 발생될 수 있는 Errors, 운영체제 Services들에 대한 요청인 System Call이 있다.
S/W 인터럽트는 잘못 처리하면 한 작업이 자원을 계속 점유하거나 컴퓨터의 동작을 크게 저해할 수 있기 때문에 여러 방법을 써서 이를 예방해야 한다.
예방 방법
1. Dual-Mode Execution
운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 기기들을 직접 관리하는 Kernel Mode로 구분된다. Kernel에서의 작업은 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시 컴퓨터 전체에 영향을 끼치기 때문에 User Mode와 Kernel Mode로 나눠 사용자가 접근하지 못하게 한다.
사용자가 User Mode에서 작업을 명령하면 Kernel Mode에서 이를 처리해야하는데 그 연결고리 역할을 하는 것이 바로 Mode-Bit이다. 운영체제는 User mode에 들어온 명령어와 일치하는 Mode-Bit을 가진 Kernel Mode의 명령어를 찾아 Kernel에서 실행한 후, 그 결과를 User-Mode에 넘기고 일을 마무리한다. 이러한 행위를 System Call이라 한다.
2. Timer
Timer는 말 그대로 프로세스들에게 유효 시간을 부여하여 그 시간이 지나면 프로세스를 종료시켜 Error가 발생하여 작업이 멈추더라도 CPU를 계속 점유하는 것을 방지한다.
'CS' 카테고리의 다른 글
| Garbage Collector (0) | 2022.12.20 |
|---|---|
| TCP / IP 4계층에 대해 알아보기 (0) | 2022.11.23 |
| 인터넷이란? 웹이란? DNS란? 웹서버란? (0) | 2022.09.21 |
| 2022 백엔드 로드맵 (0) | 2022.09.21 |
| 프로그램 vs 프로세스 vs 프로세서 vs 쓰레드 (0) | 2022.07.18 |