•
참고 강의
운영 체제의 분류
•
동시 작업 가능 여부
◦
단일 작업(single tasking) → 과거의 운영체제
한 번에 하나의 작업만 처리
ex. MS-DOS, 기능이 하나밖에 없고 그 기능에 충실한 특수 목적 기계를 위한 운영체제
◦
다중 작업(multi tasking) → 현대의 운영체제
동시에 두 개 이상의 작업 처리
ex. UNIX, MS Windows 등
•
사용자의 수
컴퓨터 한 대를 여러 사용자가 동시에 접속해서 쓸 수 있는지로 분류
◦
단일 사용자(single user)
ex. MS-DOS, MS Windows
◦
다중 사용자(multi user)
각 사용자에 대한 파일, 메모리 접근을 다른 사용자가 못 보게 보안 기능 + 사용자 간의 형평성 관리 필요
ex. UNIX, NT server
•
처리 방식
◦
일괄 처리(batch processing)
▪
작업 요청의 일정량 모아서 한꺼번에 처리
▪
작업이 완전 종료될 때까지 기다려야 함(중간에 사용자의 개입이 허용되지 않음)
▪
interactive 하지 않음
◦
시분할(time sharing) → 현대의 운영체제
▪
여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
▪
일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
▪
작은 시간 단위로 나누어서 번갈아가면서 CPU 할당
▪
각각의 사용자는 interactive한 서비스를 받기 가능
▪
사람이 느끼기에 빠르게 해주면서 동시에 주어진 자원을 최대한 활용하는 것이 목적(정확한 시간을 지키는 것이 목적이 아님 → 사람 특화 시스템)
•
효과적으로 운영하기 위해선 다중 프로그래밍 시스템이 먼저 필요
다중 프로그래밍 시스템이 필요한 이유
ex. 일반 범용 컴퓨터(Linux, Windows, iOS, Android)
◦
실시간(Realtime OS)
▪
정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
▪
스마트폰같은 장비에서 실시간성을 필요로 하는 응용 프로그램들이 늘어나면서 OS에서 해당 애플리케이션을 어떻게 지원해줘야 할 지 중요한 이슈가 되고 있음
→ 실시간성을 지켜주도록 범용 운영체제가 어떻게 하면 되겠는가
Hard realtime system(경성 실시간 시스템)
Soft realtime system(연성 실시간 시스템)
몇 가지 용어 정리
•
Multitasking : 하나의 프로그램이 끝나기 전에 다른 프로그램이 실행 가능한 것
(= Multiprogramming)
•
Multiprogramming : 메모리에 여러 프로그램이 동시에 올라가는 방식, 특히 메모리 측면을 강조
•
Time Sharing : CPU의 시간을 분할하여 나누어 쓴다는 의미, 특히 CPU쪽을 강조
•
Multiprocess : 여러 프로세스(실행중인 프로그램)가 동시에 실행되는 방식
컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미
CPU가 하나 있더라도 시간을 조금씩 나누어서 동시에 실행이 가능한 시스템
•
Multiprocessor(다중처리기) : 하나의 컴퓨터에 CPU가 여러 개 붙어 있음을 의미
◦
Processor == CPU == 처리기
◦
여러 프로그램이 CPU에 동시에 들어가는 것이 가능(병렬적으로 프로그램을 다룸)
◦
하드웨어적으로 위의 용어들과 다른 프로그램
운영 체제의 예
유닉스(UNIX)
•
대형 컴퓨터를 위해서 만들어진 운영체제
•
멀티 태스킹 가능
•
높은 이식성
◦
하나의 컴퓨터에서 돌아가는 UNIX를 전혀 다른 컴퓨터에 이식하기 쉬움
•
최소한의 커널 구조
◦
너무 많은 기능을 커널에다가 집어 넣으면 운영체제가 차지하는 메모리가 증가
◦
핵심 기능만 커널에 집어넣음
•
UNIX를 위해서 언어를 만들어서 사용
◦
C언어(기계, 사람에게 모두 가까운 언어)
•
소스 코드 공개
◦
누구나 가져다 쓰기 좋음, 운영체제 공부하기 좋음
•
프로그램 개발에 용이
◦
일반인에게는 어려움
ex. System V, FreeBSD, SunOS, Solaris, Linux
Linux
DOS(Disk Operating System)
•
PC 용량이 작고, 단일 프로그램만 지원 → 단일 작업용 운영체제
•
640KB까지만 지원해줌
MS Windows
•
PC를 위해서 만들어진 운영체제
•
단일 사용자, 단일 작업을 위한 운영체제로 시작 → DOS
•
다중 작업용 GUI 기반 운영 체제
•
불안정성(초창기 MS Windows)
•
풍부한 지원 소프트웨어
운영 체제의 구조
자원들을 관리하는 것이 운영체제의 기능
•
CPU
◦
어떤 프로그램한테 CPU를 할당할 것인가? CPU 스케줄링
▪
먼저 온 순서대로 처리 → 하나의 프로그램이 오랜 시간동안 점유하고 있다면 다른 프로그램들은 하염없이 기다려야 한다.(비효율적)
▪
CPU 자체는 굉장히 빠른데, 작업들이 CPU를 얻은 다음에 놓지 않으려고 한다면 빠른 자원을 효율적으로 활용할 수 없기에 CPU 스케줄링은 짧은 시간 간격으로 CPU를 줬다 뺐는 방식을 일반적으로 사용
▪
(이론) CPU를 가장 짧게 사용할 프로그램한테 CPU를 가장 먼저 줘야 함 → 나머지 프로그램들의 응답 시간이 짧아지면서 평균적인 성능이 좋아짐
•
Memory
◦
메모리 공간은 한정되어 있는데 여러 프로그램들이 동시에 메모리에 올라가고 싶어함
◦
어떤 프로그램한테 메모리를 얼만큼 할당해야 하는가? 메모리 관리
▪
공평하게 1/N → 사실 공평하지 않다
▪
메모리를 분배하는 이슈에 있어서는 프로그램이 점점 많아지면 각각이 가지는 메모리 공간이 점점 작아지기 때문에 프로그램이 원활하게 실행 불가
▪
CPU에서 프로그램이 실행되려면 최소한 실행에 필요한 부분이 메모리에 올라와있어야 한다.(디스크 아무리 있어도 실행안됨) → Stored Program Concept
◦
지나치게 프로그램이 많으면 CPU에서 프로그램을 실행하려고 할 때 해당 프로그램이 메모리에 없어서 Disk에서 읽어와야 한다.
▪
원활하게 전체 시스템 실행 불가
▪
동시에 많은 프로그램을 올려놓는 것보다는 그 정도 메모리는 받을 수 있도록 지원해주자 → Working Set Model
Working Set Model
◦
공평하게 나누는 것이 아니라 그때그때 특정 프로그램에게 몰아주면 더 원활하게 실행 가능
◦
어떤 프로그램을 메모리에서 쫓아내야 하는가?
▪
해당 프로그램을 다시 사용하게 될 지 미래 예측을 해야 함
▪
다시 사용될 가능성이 있는지 예측 → 최근에 사용을 많이 했는지
•
Disk
◦
디스크에서 파일을 어떻게 보관하는가? 파일 관리
▪
조각조각으로 나눌지, 연속적으로 관리하는게 좋을지
◦
디스크 스케줄링
▪
디스크를 읽거나 쓰거나하는 요청을 어떤 순서대로 처리할 것인가?
▪
Head에 가까운 위치에 들어온 요청이 있다면 순서를 바꿔서 디스크 Head의 이동을 줄이는 쪽으로 해서 사용 → 디스크의 성능이 높아짐
CPU 스케줄링과의 차이
•
I/O device
◦
입출력 장치와 컴퓨터 내부가 어떻게 정보를 주고 받게 할 것인가? 입출력 관리
▪
Interrupt에 기반해서 관리
▪
Interrupt를 걸어서 입출력장치가 CPU에게 보고한다. → 다음 작업 전에 입출력 장치가 요청한 것을 확인하고 처리해줌
▪
CPU가 최대한 방해받지 않고 사용하게 해줌
•
프로세스 관리(소프트웨어, 프로그램 관리)
◦
프로세스의 생성과 삭제
◦
자원 할당 및 반환
◦
프로세스 간 협력
•
그 외
◦
보호 시스템
◦
네트워킹
◦
명령어해석기(command line interpreter)