이 글은 충남대학교 최훈 교수님의 운영체제 수업 및 자료를 바탕으로 작성한 글입니다
1. OS란?
컴퓨터 응용 프로그램이 실행되는 과정에서 컴퓨터 하드웨어들을 제어하고 응용 프로그램 실행 결과를 보일 수 있도록 컴퓨터 내부 동작을 관리하는 소프트웨어이다.
운영체제 내부에서 운영체제가 어떻게 동작한다라는 것을 이해하면 나중에 응용 프로그램을 구현할 때도 효과적으로 어플리케이션이 더 빨리, 안전하게 돌아가는 프로그램을 구현할 수 있기 때문이다!! 따라서 우리는 OS를 배워야 한다!!
# OS의 기능
1. Process management
2. Process scheduling
3. I/O device management
4. Booting : 보조기억장치에 들어가 있는 운영체제를 실행할 수 있도록 컴퓨터의 메인 메모리로 옮기고 기타 필요한 소프트웨어를 준비하는 단계
● 프로그램의 실행을 제어하는 function들이 모인 software
● OS의 서비스를 받는 대상 : 사람, (응용 프로그램)
● program을 대신해서 컴퓨터 하드웨어를 access하고 제어함
● 응용프로그램 : Application Programs, Utilities Programs
● 응용프로그램을 실행하기 위해서는 computer hardware를 이용해야함.
=⇒ 이 둘을 연결해주는 것이 바로 OS
OS가 제공하는 서비스에는 프로그램 실행, 컴퓨터 자원에 접근(hardware, software, data...), error detection, collect usage statistics 가 있다
운영체제 기능 중에서 항상 메인 메모리에 들어와 있는 기능 ↔ Hard Disk에는 Kernel에 해당되지 않는 다른 기능도 있을 수 있다.
폰 노이만 구조 : 소프트웨어가 실행되려면 메인 메모리에서 위치해야 함. 따라서 보조기억장치에 있는 것은 보관용일 뿐이고 이들이 실행되기 위해서는 반드시 메인 메모리로 복사되어 들어와야함
2. Kernel
운영체제 중에서 핵심 기능이다. Kernel = 운영체제라고 봐도 무방하다.
# Uni-programming & Multi-programming
● Simple batch system(일괄처리 방식)
: 여러 개의 프로그램들을 묶어놓고 있다가 차례로 하나씩 실행시키는 방식
● Monitor
: 실행해야 될 사용자 프로그램을 메모리에 집어넣고 실행시켜 결과를 출력하게 하는 일련의 과정을 제어하는 소프트웨어
● 사용해야 될 사용자 프로그램 →User Program Area → 결과
● 소프트웨어를 실행하려면 마찬가지로 Main memory에 들어가야함
# Uni-programming
● 일반적인 프로그램 : 실행 → 입력 → 실행 → 출력 같은 단순한 패턴 반복
● 단점 : CPU의 대기 시간이 길다 = CPU 활용도가 낮음
● I/O는 일반적으로 CPU보다 속다가 느려서 시간이 오래 걸림
● 3.2%를 제외한 96.8%의 시간동안 CPU는 놀고 있음
예시로 보자.
A가 신청서를 작성한다고 하면 직원이 할게 없다. 손님이 신청서를 작성하지 않으면 직원이 볼 수 있는 정보가 없다. 직원이 할 수 있는 것은 그저 기다리는 것 뿐이다...
⇒ 우체국 : 컴퓨터 시스템 / 직원 : CPU / 의자 : Main Memory / 고객 : Program
한 고객이 신청서를 쓴다면 그 동안 직원은 다른 고객을 상담가능한다. 즉 Uni-programming보다 직원, 즉 CPU 활용도가 높다
# Multiprogramming System
● A가 Run하고 wait할 때 B가 wait하다가 실행되고 B가 wait하면 C가 실행됨
● 이 때 A, B, C 가 모두 Main Memory에 있어야 함, 따라서 CPU의 활용도를 높이기 위해서는 Main Memory의 크기가 커져야 함
3. Process Scheduling
Program A가 더 이상 실행되지 않을 때, A 대신 B나 C 중 선택해서 실행해야함. 이 때 B나 C 중 어떤 것을 선택해서 실행해야될 지를 컴퓨터의 운영체제가 해야함. 그래서 운영체제로 하여금 “B를 선택해라”, “C를 선택해라” 같은 결정을 할 수 있는 기준을 마련해 주어야 하고 그 기준이 운영체제 소프트웨어 안에 구현되어 있어야 함.
이러한 기능을 우리는 “Process Scheduling” 이라고 한다. ( = CPU scheduling, Job scheduling)
# Timesharing
CPU가 일정한 시간 단위로 각 프로그램에게 번갈아 시간을 주면서 실행시키는 방법 (Multiprogramming 개념의 확장)
● 위 그림에서는 0.1초마다 프로그램 실행
● 대기 시간이 매우 짧아서 마치 program들이 마치 자기 혼자 CPU를 독점하는 것처럼 느껴짐(논리적인 제어 흐름)
● response time : 사용자가 명령을 주고 CPU가 그 프로그램을 실행할 때까지의 시간
멀티프로그래밍에서의 예시를 한번 보자.
● multi-programming : 실제로는 A를 실행하는 시간, B를 실행하는 시간이 다름
● Time sharing system : program이 CPU를 사용하는 시간이 같다. ⇒ 둘의 차이점을 잘 알도록 하자
(주의) 사진은 편의상 그림의 런타임 크기가 같아보이게 그려져 있다. 따라서 실제는 다르다
둘을 비교해서 차이를 아는게 중요하다
1. Timesharing은 Multiprogramming에 비해 더 많은 program들을 Main memory에 넣고 짧은 시간동안 번갈아가면서 실행
⇒ 즉 더 많은 program을 Main memory에 넣는 것이 효율적
2. Multiprogramming
● background processing( =batch processing)
● 상대적으로 오래 실행해야 되는 프로그램들을 여러개 모아서 차례로 실행하는데 적당함
● OVERHEAD(CPU TIME) 적게 듬
● Throughput(단위 시간동안 수행해야하는 일의 양)이 많음
● processor 효율이 time-sharing 보다 좋음
3. Timesharing
● Interactive processing, foreground processing
● Multi-programming 보다 OVERHEAD가 높음. 즉 CPU TIME이 낭비
● 짧은 response time
# Multiprogramming vs Multiprocessing
하나의 CPU가 여러가지 process를 concurrent 하게 실행하느냐 여러 개의 CPU가 process를 parallel하게 진행하느냐에 차이가 있다.
Bonus) Symmetric Multiprocessing(SMP)
● CPU를 여러 개 가짐
● processor 1, 2, 3 이 같은 성격의 일을 하고 processor 4, 5가 같은 성격의 일을 하면 CPU A가 1, 2, 3을 담당하고 CPU B가 4, 5를 담당함
● Main Memory에는 1, 2, 3, 4, 5가 다 들어가 있음
4. OS의 구성 요소
OS는 다양한 관리 기능을 가진다.
● Process 관리
● Main Memory 관리(메모리 공간을 프로그램에게 할당하고 회수하는 것)
● File 관리
● I/O 시스템 관리
● 보조기억장치 관리(보조기억장치에 공간을 할당하고 회수하고 관리)
아래 내용은 분산시스템에 관한 내용인데 추가적으로 조금만 알아두자
참고!
분산 시스템 : 컴퓨터 하드웨어와 운영체제를 가진 독립적인 컴퓨터, 여러 대의 컴퓨터를 컴퓨터 네트워크로 연결하고 그 위에 분산 처리에 필요한 별도의 소프트웨어를 탑재해서 여러 대의 컴퓨터들이 하나의 목적으로 하나의 응용 프로그램을 실행할 수 있도록 제어하고 관리되는 시스템이다.
→ 처리 속도가 빠름
→ 한 대가 고장 나도 다른 한 대가 같은 기능을 수행(서비스의 연속성, 신뢰성이 높음)
# Command - Interpreter System(Shell)
사람이 OS를 사용하는 방법이다.
System calls은 운영체제에게 프로그램이 명령을 전하는 방법(응용 프로그램이 OS 를 사용할 수 있도록 Interface 역할을 하는 함수들의 집합)이다.
● 보안 상의 이유로 프로그램이 부를 수 있는 OS의 function이 정해져 있음
● function call 호출 → function call이 운영체제의 서비스 실행
5. OS Architecture
OS 커널의 종류는 두가지로 볼 수 있다
# Monolithic Kernel
monolithic 이란 단일체라는 의미, 즉 monolithic kernel은 kernel software가 한 덩어리로 다같이 모여 있는 구조이다.
위 그림에서 분홍색으로 색칠된 박스 안에 있는 것은 kernel mode로 실행됨kernel mode 란 컴퓨터가 응용 프로그램 코드를 실행하는 것이 아니라 OS 코드를 실행하고 있는 상황이다.
# Micro kernel
OS의 기능들이 OS 외부에 구현되는 구조
● 하드웨어를 직접 제어해야 하는 코드들, 프로세스 메모리 영역을 보호하는데 필요한 기능, 프로세스 간 기본적 통신 기능, scheduling 기능은 kernel 내부에 남아 있음
● 파일 관리, 가상 메모리를 위한 기능, 통신 프로토콜, I/O device 를 제어하는 기능 ⇒ kernel 밖으로 뺄 수 있음
● 이때 밖으로 뺀 기능은 응용 프로그램처럼 독립적인 프로그램으로, 즉 process의 형태를 띄고서 응용 프로그램이 OS 위에서 실행되는 것처럼 kernel의 기능이 실행
⇒ kernel의 기능이 작음
1. 장점
● kernel 의 크기가 작음(스마트폰, IOT에 사용되는 장치들처럼 작은 운영체제를 필요로 하는 경우 효과적으로 사용)
● 요청 프로세스가 생성한 요청에 대한 균일한 인터페이스
● 확장성, 유연성, 이식성, 신뢰성
EX. (그림 참고) S3을 수정했다 했을 때 S3만 새로 컴파일 하고 죽였다가 새로 실행시키면 됨. Monolithic의 경우 kernel 전체를 새로 컴파일하고 시스템을 껐다가 켜야 함
2. 단점
● 개발 과정에선 편하지만 Monolithic kernel에 비해 속도가 느림. 따라서 서버용 OS로는 적합하지 않음
● 속도 차이가 나는 이유
=> Monolithic : kernel 내부의 S2, S3 기능이 서로 정보를 주고 받아서 일을 같이 해야할 때 내부에서 내부 함수 콜로 결과를 받아서 빠름
=> Micro : S2가 S3에 기능을 요청할 때 kernel에게 요청하면 kernel이 다시 S3에게 전달하고 S3가 다시 결과를 kernel에 전달하고 kernel이 다시 S2에 결과를 전달하므로 속도가 느림
6. OS의 예시
1. real-time OS : 정해진 시간 안에 정확하게 작업을 수행하는 OS
2. UNIX : 운영체제 역사에서 의미가 있음. 하드웨어가 달라지더라도 C언어 소프트웨어를 새로 compile하면 쉽게 다른 하드웨어 위에 올릴 수 있음.
⇒ 하드웨어가 바뀌거나 발전되어도 OS를 변경할 필요 없이 UNIX라는 OS를 그대로 새로운 하드웨어에 올릴 수 있음
ex. BSD(Berkeley Software Distribution) : 기능 향상, 확대 발전
3. Linux : Linus Torvalds가 빠른 실행시간을 지닌 OS를 만들자는 목적으로 만듬
4. Window : PC에서 많이 사용하며 Micro kernel과 User-mode process(CPU가 사용자 코드를 실행하고 있는 상황)로 구성됨
●User-mode process
: System support process, Service process, Application.. 은 application처럼 kernel 외부에 있는 독립적인 프로그램으로 만들어져 실행되도록 하는 구조 이들은 kernel mode가 아닌 user mode에서 실행됨!
다음 시간부터 본격적으로 학습해보자