[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표, 운영체제의 분류, 몇 가지 용어, 운영체제의 예, 운영체제의 개괄적인 구조)
0. Intro
[ 운영체제 과목 학습 개요 ] - 운영체제 개요 - 컴퓨터 시스템의 구조 - 프로세스 관리 - CPU 스케줄링 - 병행 제어 - 데드락 - 메모리 관리 - 가상 메모리 - 파일 시스템 - 입출력 시스템 - 디스크 관리 |
1. 운영체제(OS)란?
: 컴퓨터 하드웨어 바로 위에 설치되어, 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는, 소프트웨어 계층
* 운영체제를 설치하지 않으면, 하드웨어는 일반 고철덩어리와 다름없다.
- 협의의 운영체제 (커널) * 전공자 입장에서 일반적인 운영체제의 개념
: 운영체제의 핵심 부분으로, 부팅이 된 이후로 메모리에 항상 상주하는 부분
- 광의의 운영체제
: 커널뿐만 아니라, 각종 주변 시스템 유틸리티를 포함한 개념
ex. 운영체제 커널 + 몇몇 프로그램 (파일복사 소프트웨어 ...)
2. 운영체제(OS)의 기능 및 목표 (기본적인 역할)
a. 하드웨어와 어떻게 인터페이스를 해야 하는가? b. 소프트웨어와 어떻게 인터페이스를 해야 하는가? |
1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것과 같은 환상을 제공한다.
* 즉, 사용자들이 프로그램을 실행시킬 때, 본인 컴퓨터에서만 프로그램을 실행시키는 것과 같은 착각을 일으킨다. 실제로는 많은 프로그램이 동시에 돌아가고 있다.
- 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.
* 하드웨어에 직접 접근하지 않아도, 운영체제로만 기능을 대신할 수 있다.
ex1. 운영체제는, CPU를 아주 짧은 간격으로, 이곳저곳에 가장 효율적인 방법으로 할당하도록 도움
ex2. 운영체제는, 각 프로그램에, 메모리 공간을 적절하게 주면서 실행시킬 수 있도록 도움
2. 컴퓨터 시스템의 자원을 효율적으로 관리
- 운영체제의 핵심적인 기능 : 컴퓨터 시스템의 자원을 효율적으로 관리 가능하다.
(컴퓨터 시스템의 하드웨어 자원은 이미 주어져 있음)
cf) 컴퓨터 시스템 내부에서의 (하드웨어) 자원이란? : CPU, 메모리, 각종 IO(입출력)장치, HDD 등 보조기억 장치
* (소프트웨어) 자원이란? : 프로세스, 파일, 메세지 등..
- 즉, 여러 사용자들이 자신의 프로그램을 실행시키는데, 자기 자신만의 컴퓨터가 따로 존재한다고 생각하지만, 실제로는 한 대밖에 없으며, 그 내부에 CPU/메모리 등이 존재한다.
- 이 CPU, 메모리 등을 가장 효율적으로 활용하기 위해서는 어떻게 분할하고 사용해야 할지 고민하고 관리하는 것이 운영체제의 핵심적인 역할이다.
* 이는 효율성이 가장 우선적으로 고려되는 것이며, 공평하지 않을 수 있다.
다시 정리하자면, 운영체제(OS)의 최우선적인 목표는, 자원을 효율적(어떻게 해야 한정된 CPU나 메모리를 가지고 가장 좋은 성능을 뽑아낼 수 있는지)으로 관리하는 것이다.
조금 더 생각하자면, 운영체제(OS)를 설계할 때는 효율성 이외에 형평성 부분도 고려해야 한다. 전체적인 평균 성능이 좋아야 하는 것은 맞지만, 특정 프로그램 및 사용자들이 너무나도 큰 차별을 받으면 안 되기 때문이다.
3. 운영체제의 분류
1. 동시 작업 가능 여부 2. 사용자의 수 3. 처리 방식 |
1. 동시 작업 가능 여부
1) 단일 작업 (single tasking)
- 한 번에 하나의 작업만 처리
- 과거의 운영체제 형식 cf) 전화만 가능하던 휴대폰
ex. MS-DOS 프롬포트 : 이 위에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음
2) 다중 작업 (multi tasking)
- 동시에 두 개 이상의 작업 처리
- 현대의 운영체제 형식 cf) 일반 컴퓨터, 노트북, 스마트폰, TV 등..
ex. UNIX, MS Windows 등 : 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음
2. 사용자의 수
1) 단일 사용자 (Single user)
* 단일 작업 - 단일 사용자만 지원해줌
ex. MS-DOS, MS Windows
2) 다중 사용자 (multi user)
- 컴퓨터 한 대를 여러 사용자가 동시접속해서 사용할 수 있게 하는 것.
- 즉, 계정을 통해 원격으로 접근해서 활용할 수 있도록 하는 것임
* 다중 사용자의 특성을 지닌 운영체제라면, 각 사용자에 대한 파일 및 메모리 접근 등의 부분에서 보안 기능이 추가되어야 할 것이며, 형평성있게 자원을 활용가능하도록 하는 부분 또한 고려해야 할 것이다.
ex. UNIX, NT server
3. 처리 방식
1) 일괄 처리 (batch processing)
- 어떤 작업이 주어졌을 때 바로 처리하는 것이 아닌, 모아서 한꺼번에 처리하는 방식
- 현대의 운영체제에서는 찾아보기 어려운 방식이며, 작업이 한 번 실행되면 완전 종료될 때까지 기다려야 함.
ex. 초기 Punch Card 처리 시스템
2) 시분할 (time sharing)
- 여러 작업을 수행할 때, 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
- 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐.
- interactive(두들기면 바로 나오는)한 방식임
* 여러 작업을 아주 작은 시간단위로 나눠가며 할당하고, 다시 돌아오기 때문에 사람들은 interactive하다고 느끼는 것
* 그래서 사용자가 굉장히 많이 늘어날 경우, 응답시간이 급격하게 증가하는 것
- 현대의 일반적인 운영체제 방식
ex. UNIX, Linux, IOS, Windows ...
3) 실시간 (Realtime OS)
- 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는, 실시간시스템을 위한 OS
ex. 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어
* 잠깐이라도 문제가 생기면 상당히 큰 문제가 발생 : 몇 분 정전이 한달동안 생산을 못하게 할 수도 있음
* 시분할과 비슷하게 보이지만, 개념적으로는 상당히 다르다.
: 실시간 OS는 deadline이 있다. 따라서, 정해진 시간 내에 결과가 나오는 것을 보장해주는 시스템이다.
: 보통 시분할 방식은 범용 컴퓨터에서 사용하며, 실시간 OS는 특수한 목적을 가진 시스템에서 이루어진다.
[ 실시간 시스템의 개념 확장 ]
- Hard realtime system(경성 실시간 시스템)
: 특수 목적으로 정해진 시간을 꼭 준수해야 하는 경우
- Soft realtime system(연성 실시간 시스템)
: 정해진 시간을 꼭 지키지 못해도, 그다지 큰 문제가 생기지 않는 경우
ex. 영화, 멀티미디어 플레이 ... (그러나 실제로는 시분할 OS위에서 활용함)
이 수업에서는 일반적으로, 다중 작업을 지원하고, 다중 사용자를 지원하며, 시분할 방식으로 운영되고 있는 운영체제(OS)들에 대해서 배울 것임.
4. 몇 가지 용어
1 ) Multitasking, MultiProgramming, Time sharing, Multiprocess
: 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻하는 용어들
* 강조하는 부분만 조금씩 다른 것
- Multitasking : 좀 더 일반적인 용어
- MultiProgramming : 여러 프로그램이 메모리에 올라가 있음을 강조
- Time sharing : CPU(porcessor) 시간을 분할하여 나누어 쓴다는 의미를 강조
- MultiProcess : 여러 프로그램이 동시에 실행됨을 강조
2) Multiprocessor (다중처리기)
: 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미
* 즉, CPU가 여러 개 달려있는 컴퓨터. 여러 프로그램이 동시에 들어갈 수 있음.
ex. 1 CPU에는 1프로그램이 실행, 2 CPU에는 2 프로그램이 실행 ...
: 일반적으로 고성능 컴퓨터와 같은 경우에 활용함.
# 즉, 1)은 CPU가 하나 있더라도, 시간을 조금씩 나눠 동시에 실행되도록 가능하게 하는 시스템을 이야기하는데 반해, 2)는 multitasking 지원이 되면서도 CPU가 여러개 있는 하드웨어를 지원하는 것을 의미함. 다시 말해, 둘은 다른 환경이라는 것임.
# 수업에서는 CPU가 하나 있는, 범용 운영체제에 대해 이야기할 것.
5. 운영체제의 예
UNIX OS와, Windows OS는 서로 만들어진 동기가 다름 - UNIX OS : 기본적으로 멀티테스킹이 가능하고, 여러 사용자들을 동시에 지원해주기 위해 만들어짐 (서버용) - Windows OS : 단일 사용자, 단일 작업만 지원해주기 위해 만들어짐 (개인용) |
1) UNIX (유닉스)
- 코드의 대부분을 C언어로 작성
* UNIX OS를 만들기 위해 만들게 된 프로그래밍 언어가 C언어. 이전까지는 어셈블리어를 활용함
* C언어는 일반적인 고급언어와는 달리, 기계와도 가깝고 사람과도 가까운 언어임
- 높은 이식성
* 기계어 집합이 전혀 다른 컴퓨터에도 이식하기가 쉬움.
* 하나의 컴퓨터 기계어에만 국한되게 만드는 것이, 이식성이 낮은 운영체제임.
- 최소한의 커널 구조
* 핵심적인 부분만 집어넣고, 일반적인 기능들은 모두 밖으로 빼냄. 따라서 확장성이 높고, 학술적으로 활용하기 좋음
- 복잡한 시스템에 맞게 확장 용이
- 소스 코드 공개
- 프로그램 개발에 용이
- 다양한 버전
ex. System V, Free BSD, SunOS, Solaris, Linux
* 초기의 UNIX는 대형 컴퓨터 및 서버를 위한 OS였는데, Linux는 특이하게 서버 뿐만 아니라 개인용 컴퓨터에 설치해서 사용하기에도 상당히 좋은 성질을 지니고 있음.
2) DOS(Disk Operating System)
- MS사에서 1981년 IBM-PC를 위해 개발
* MS사에서 개인용 PC를 위해 출발한 OS
- 단일 사용자용 운영체제, 메모리 관리 능력의 한계 (주 기억 장치 : 640KB)
* 초기에는 PC 용량이 매우 작으며, 단일 프로그램만 지원 가능하도록 함.
- 이후 하드웨어의 발전속도가 급격하게 빨라지면서, 640KB보다 더 큰 저장소를 마련하게 되고, 이를 위해 DOS 운영체제는 지속적으로 수정 및 발전하게 됨.
- Windows는 수정하는 과정에서 DOS 위에서 실행되는 형식으로 이루어지다가, 이후 독자적인 운영체제로 나오게 됨.
3) MS Windows
- Windows OS는 소스코드 공개 X
* 결과물만 공개해서 상업적으로 판매함
- MS사의 다중 작업용 GUI 기반 운영 체제
- Plug and Play, 네트워크 환경 강화
- DOS용 응용 프로그램과 호환성 제공
- 풍부한 지원 소프트웨어
4) Handheld device(휴대기기)를 위한 OS
- PalmOS, Pocket PC(WinCE), Tiny OS
* 최근에는 스마트 디바이스를 위한 운영체제(IOS) 등이 등장하면서, 점점 여러가지 형태로 발전하게 됨
6. 운영체제의 개괄적인 구조
# 운영체제의 기본적 기능 : (컴퓨터) 자원들을 관리하는 것
1) CPU
- CPU 스케줄링 : 누구에게 CPU를 어떻게 나눠워야 효율적일지 구성하는 것
2) 메모리
- 메모리 관리 : 한정된 메모리를 어떻게 쪼개어서 나눠주어야 하는가?
ex. Working-set모델 (모두 다 같은 비율 X, 특정 부분에 적재적소로 나눠주기), 미래 예측 (과거에 대한 기본적인 정보를 기반으로 미래 예측해 메모리 관리를 실행함)
3) 디스크
- 파일 관리 : 디스크에 파일을 어떻게 보관할 것인가?
* CPU 스케줄링 vs 디스크 스케줄링
: CPU - 너무 빠른 CPU를 어떻게 관리해야 하는지 이슈가 생김
: 디스크 : 어떻게 하면 헤드의 움직임을 최소화하면서, 가장 빨리 처리할 수 있는지에 대한 이슈가 생김
4) I/O device
- 입출력 관리 : 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고받게 하는가?
* CPU, 메모리 등에 비해, I/O device는 굉장히 느리다. 이 장치들이 정보를 CPU와 잘 교류하기 위해서는 어떻게 해야하는가?
ex. Interrupt(인터럽트)에 의한 관리 : CPU는 항상 빠르게 자기 일을 하는 동안, I/O장치가 CPU에게 인터럽트를 걸어 정보를 전달하면, CPU는 다음 작업을 하기 전에 요청사항에 대해 파악하고 처리함.
5) 프로세스 관리
: 컴퓨터 내부에서 돌아가는 소프트웨어를 어떻게 관리할 것인가?
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |