본문 바로가기

문과 코린이의, [운영체제] 기록

[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표, 운영체제의 분류, 몇 가지 용어, 운영체제의 예, 운영체제의 개괄적인 구조)

반응형

[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표, 운영체제의 분류, 몇 가지 용어, 운영체제의 예, 운영체제의 개괄적인 구조)

[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표, 운영체제의 분류, 몇 가지 용어, 운영체제의 예, 운영체제의 개괄적인 구조)


 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net


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) 프로세스 관리

: 컴퓨터 내부에서 돌아가는 소프트웨어를 어떻게 관리할 것인가?

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형