운영체제 (Operating System, OS)
- 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
- 하드웨어와의 상호작용 + 다른 모든 소프트웨어, 또는 사용자와 상호작용
운영체제의 목표
- 컴퓨터 자원의 효율적 관리
- 자원 (Resources) : 프로세서, 기억 장치, 입출력 장치...
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공
- 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행
- 운영체제는 동시 사용자 / 프로그램이 각각 독자적 컴퓨터에서 수행되는 듯한 환상을 제공
- 하나의 CPU가 실행 중인 프로그램들에게 짧은 시간씩 번갈아가면서 할당.
- 실행 중인 프로그램에 메모리 공간을 분배
운영체제의 의미
- 협의(좁은 의미) : 커널
- 운영체제의 핵심 부분, 메모리에 상주하는 부분
- 광의(넓은 의미)
- 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념
운영체제의 분류
1. 동시작업 가능 여부
- 단일 작업(single tasking)
- 한 번에 하나의 작업 처리
- MS-DOS 프롬프트 상에서는 한 명령을 끝내기 전에는 다른 명령 수행 불가
- 다중 작업(multi tasking)
- 동시에 두 개 이상의 작업 처리
- 현대적 운영체제
- UNIX, MS Windows 등에서는 하나의 명령 끝나기 전에 다른 명령이나 프로그램 실행 가능.
2. 사용자의 수
- 단일 사용자(single user)
- MS-DOS, MS Windows
- 동시 접근 불가 (MS windows도 서버 기능 추가하면 되기는 하는데 ...)
- 다중 사용자(multi user)
- UNIX, NT server
- 동시 접근 가능
- 사용자 간 보안기능, 각자의 자원 관리 기능 추가 필요
3. 처리 방식
- 일괄 처리(batch processing)
- 작업을 바로 처리하는 것이 아니라, 모아서 처리하는 것.
- 현대 운영체제에서는 찾아보기 힘듦
- 시분할(time sharing)
- 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
- task1 - task2 - task3 - task1 - task2 - ...
- 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
- 사용자가 느끼기에 즉각적으로 작동한다고 느껴짐
- 현재 우리가 사용하는 컴퓨터 OS 방식
- 실시간(realtime OS)
- 시분할, 실시간 모두 겉보기에는 Interactive 해보인다.
- 하지만 실시간은 (시분할과는 다르게) DeadLine이 있다.
- 즉, 해당 DeadLine 내에서 task가 반드시 종료됨을 보장한다.
- 일종의 Special Purpose System (반드시 끝나야만 하는)
- Hard (무조건 DeadLine 내에) / Soft (살짝 어겨도 OK)
4. 몇 가지 유사 용어
- Multi-tasking : 동시 진행되는 작업 (물론 실제로는 교대로 수행하지만)
- Multi-Programming : 메모리에 여러 프로그램이 올라가는 방식 (메모리적 측면 강조)
- time-sharing : 시간을 분할해 나누어 쓰는 진행 (CPU적 측면 강조)
- Multi-Process
- 위 용어들은 여러 작업을 동시에 수행하는 것을 말한다.
5. 운영체제의 예
유닉스(Unix)
- 코드 대부분을 C언어로 작성. (UNIX 만들기 위해 제작)
- 높은 이식성, 최소한의 커널 구조, 복잡한 시스템에 맞게 확장 용이
- 대형 시스템을 위한 OS
- 멀티 태스킹 가능. 다중 사용자 지원.
- 프로그램 개발에 용이
- System V, FreeBSD, Linux
DOS(Dist Operating System)
- 애초에는 Personal Computer 타겟
- 따라서 초기에는 다중 사용자 지원 안했음.
- 단일 사용자용, 단일 작업 지원 OS
- 메모리 관리 능력의 한계(640kb)
윈도우(MS Window)
- MS사의 다중 작업용 GUI 기반 운영 체제
- DOS용 응용 프로그램과 호환성 제공, 풍부한 지원 소프트웨어
- 불안정성
6. 운영체제의 구조
CPU 스케쥴링
- CPU 자원은 한정적. 시간이 오래 걸리는 프로그램이 먼저 CPU를 잡고 있으면 이후 시간이 적게 걸리는 프로그램도 기다리게 된다. (병목 현상과 같이)
- 때문에 여러 프로그램을 번갈아 수행하던가, 시간이 적게 걸리는 프로그램을 우선순위로 삼는 등의 행위가 필요하다.
메모리 관리
- 메모리 분배에 있어서, 프로그램마다 동일한 크기의 메모리를 할당하는 것은 언뜻 공평해보인다.
- 하지만 실제로는 프로그램 수행을 위해 어느정도의 메모리는 필요하므로, 다중 프로그램이 수행되는 경우에 프로그램에 할당되는 메모리 크기가 너무 작은 경우 비효율을 초래할 위험성이 있다.
- 일부 프로그램에만 충분히 메모리를 할당해주고 해당 프로그램들이 어느정도 종료 되었을 때, 다른 프로그램을 다시 불러와서 수행한다.
- 어떤 프로그램을 메모리에서 쫓아내야 하는가? (CPU에서 다시 부를 가능성이 적은 것 ...)
파일 관리
- 디스크에서 HEAD를 어떻게 덜 움직일래 (덜 움직여야 빠름)
입출력 관리
- 각기 다른 I/O Device 어떻게 관리할래
프로세스 관리
- 어떻게 생성 / 삭제할래
- 어떻게 자원 할당하고 반환할래
... 등등을 다룰 예정입니다.
강의 : 운영체제 (KOCW) - 반효경
교재 : OSTEP - three easy pieces