2024년 1학기 운영체제 수업을 듣고 정리한 내용입니다. 수업 교재는 운영체제 - 내부구조 및 설계원리 8 판입니다.
Operating System
운영체제 또한 프로그램이다. 다른 프로그램의 실행을 주관하는 메인 프로그램이다. 또한 프로그램과 하드웨어 간 인터페이스 역할을 담당한다. 유저 프로그램을 만드는 개발자들은 하드웨어의 사용이 필요할 때 운영체제라는 인터페이스를 사용하게 된다.
운영체제는 다음과 같은 일을 한다.
- 컴파일러
- 프로그램 실행
- I/O 디바이스 관리
- 파일 관리
- 시스템 자원 관리
- 사용자 계정 관리
- ...
Kernel
옛날에는 운영체제의 크기가 작아 메인 메모리에 모두 올릴 수 있었지만, 시간이 지나면서 운영체제의 크기가 거대해지므로 메모리에 모두 올릴 수 없게 되었다. 그래서 정말 필요한 운영체제의 일부만 메모리에 올리고 나머지 프로그램들은 라이브러리 형식으로 호출할 수 있도록 변했다. 항상 메모리에 올라와 있는 프로그램을 커널이라고 한다.
발전 역사
Uniprogramming
프로세서는 한 번에 한 가지의 작업만 한다. 그러므로 프로세서가 열심히 작업을 하다가 I/O 작업을 요청한다면 입출력이 종료될 때까지 무한정 기다려야 한다. CPU의 유휴시간을 측정해보면 대부분의 시간이 I/O 작업이 완료될 때까지 기다리는 시간이다.
Multiprogramming
여러 프로그램을 메모리에 올린 후 프로세서가 각 프로그램을 번갈아 실행한다. I/O 작업을 요청하지 않는다면 멈추지 않고 계속 실행된다. 만약 실행중인 프로그램이 I/O 작업을 요청한다면, Uniprogramming처럼 I/O 디바이스에게 요청을 넣은 후 기다린다. 하지만 기다리는 동안 메모리에 올라와 있는 다른 프로그램을 실행할 수 있다.
하지만 메모리에 올라와 있는 모든 프로그램이 I/O 작업을 요청하고 끝나길 기다리는 상황이라면 Uniprogramming처럼 아무것도 하지 않고 기다리는 상황이 있게 된다.
Time Sharing
Multiprogramming을 사용하지만, 상호작용을 우선시한다. 프로세서의 시간을 여러 프로그램들이 공평하게 나누어 가진다. 다시 말해서 프로그램마다 지정된 시간만큼 프로세서를 사용하고 다른 프로그램에게 프로세서를 넘겨준다.
Multiprogramming은 프로세서를 최대한 사용하는 것(유휴 시간을 최소로 하는 것)이 주 목표지만 Time Sharing 방식은 입력에 대한 반응속도를 최소로 하는 것이 목표다.
Multiprogramming은 실행하는 프로그램이 I/O 작업을 하는 것이 아니라면 절대 멈추지 않는 Batch 방식이므로 File형태로 입출력을 하지만, Time Sharing은 모든 프로그램이 지정된 시간만큼 CPU를 사용하기 때문에 Terminal을 통해 실행중에도 상호작용이 가능하다.
Major Achievements
아래의 기능들은 모든 운영체제가 기본적으로 갖고, 정립이 된 기능들이다.
- 실행중인 프로그램을 관리하기 위한 별도의 자료구조 (프로세스)
- 메모리 관리 기법 (가상 메모리)
- 프로세스 보호 및 보안? (가상 메모리에서 protection)
- 스케쥴링 및 자원 관리 (프로세스의 실행 순서 및 데드락 감지 등)
Modern Operating System
운영체제마다 사용하거나 사용하지 않는 기능들이다. 정립이 완전히 끝나지 않은 기능들이다.
마이크로커널 아키텍쳐
커널은 항상 메모리에 상주해야하지만 커널의 크기가 크다면 메모리를 많이 차지하게 된다. 따라서 정말정말 필요한 기능을 제외하고 나머지 기능들은 별개의 OS 프로그램으로 만들어 필요할 때마다 불러오는 방법이다.
멀티스레딩
프로그램의 일부를 스레드로 만들고, 여러 스레드를 동시에 실행한다. 한 프로그램을 한 프로세서에서 실행하는 것보다 속도가 훨씬 빠르지만 동시성 문제를 해결해야한다.
Symmetric MultiProcessing (SMP)
다수의 프로세서가 동시에 한 프로그램을 실행하면 같은 자원에 동시에 접근하는 문제가 발생한다. SMP는 하드웨어 구조적으로 동시에 접근할 수 있는 도구를 제공한다.
분산컴퓨팅
다수의 컴퓨터를 네트워크로 묶은 후 명령을 처리할 때 여러 컴퓨터에 작업을 분산시켜 처리하는 방식이다.
객체지향 디자인
Windows
윈도우는 마이크로커널 아키텍쳐를 사용하고 객체지향 디자인을 사용한다. 커널을 제외한 각 OS 프로그램은 객체지향적 디자인으로 설계하여 확장성을 가진다. 프로그램 간 통신은 커널을 통해 데이터를 주고받게 된다.
Unix
유닉스는 프로세스안에 커널 코드가 들어간다. 그리고 커널 내부에 존재하는 여러 코드들이 포인터로 엮여 있어 수정하기에 까다롭다. 그래서 확장성이 낮지만, Interrupt가 발생했을 경우 실행중인 프로그램을 다른 프로그램으로 변경하지 않고 프로세스 내에 있는 커커널 코드를 실행하게 되므로, 프로세스를 교체할 때 발생하는 비용이 굉장히 줄어드는 이점이 있다.
'대학교 공부 > 운영체제' 카테고리의 다른 글
운영체제 (6) - Concurrency: Deadlock and Starvation (0) | 2025.06.18 |
---|---|
운영체제 (5) - Concurrency: Mutual Exclusion and Synchronization (0) | 2025.06.18 |
운영체제 (4) - Threads (0) | 2025.06.18 |
운영체제 (3) - Process Description and Control (0) | 2025.06.18 |
운영체제 (1) - Computer System Overview (0) | 2025.06.18 |
댓글