안녕하세요!

FE 개발자 유진주입니다.

CS/운영체제

Chapter1. OS란?

ypearl 2023. 3. 16. 11:40

운영체제(Operating Systems)란?

: 컴퓨터의 여러 응용 프로그램을 설치되게 해주고, 여러 가지 장치를 효율적으로 작동하도록 하며, 사용자가 컴퓨터를 손쉽게 이용할 수 있도록 해주는 프로그램의 집단.

: 사용자 인터페이스(User Interface)+자원 관리(Resource Management)를 위한 프로그램의 집합.

 

덧붙이자면, 그 밖에도

"컴퓨터의 사용자와 하드웨어 사이에서 가교 역할을 하는 프로그램"

"하드웨어 그 자체가 가지고 있는 능력을 십분 발휘되도록 제어해주는 프로그램"

"컴퓨터가 컴퓨터 밖의 세계와 상호동작하는 방법을 정의한 프로그램" 의 의미를 지님. (결국 모두 같은 뜻이다)

 

운영체제시스템 프로그램을 합쳐 시스템 소프트웨어(ex. 윈도우)라 하고 (둘을 명확히 구분하기 어렵기 때문),

* 시스템 프로그램: 컴퓨터 하드웨어에 의존적이며 그 시스템을 정상적으로 작동시키기 위해 필요한 프로그램

응용 프로그램 집단응용 소프트웨어(ex. 게임 프로그램)로 분류한다.

- 시스템 소프트웨어는 컴퓨터 기종에 따라 다르나, 응용 소프트웨어는 기종에 관계없이 작성될 수 있다.

 

운영체제의 과거?

: 컴퓨터의 역사

1. 수동식 계산기

- 존 네피어 봉(by.  존 네피어) / 톱니바퀴 계산기(by. 파스칼) / 계산기(by. 라이프니쯔)

* 이 시대에는 당연히 운영체제라는 개념조차 존재하지  X

 

2. 자동계산기

- 증기기관 해석장치(by. 배비지) / 천공기(by. 홀러리스) / MARKⅠ(by. 에이컨)

* 이 시대 역시 운영체제 존재하지 않았으며,

지금 운영체제가 하는 일들은 모두 소수의 기술자에 의해 수동으로 조작되었음.

 

(1) 1세대 운영체제 (1940-1950년대)

세계 최초의 컴퓨터 ENIAC 등장

IBM 701에 와서야 비로소 운영체제의 기능 장착

=> 일괄처리 시스템(Single-stream Batch Processing Systems) 등장

: 다수 개의 프로그램을 읽어 저장해 놓되, 한 번에 한 개씩의 프로그램을 실행시켜 주는 방식

(단, 작업이 끝날 때까지 사용자의 중간 개입이 허용되어 있지 않음.)

문제점ㅡ> CPU 낭비 (한 개의 작업이 처리되는 동안 CPU가 사용되는 기간은 매우 짧다. ㅡ 대표적 예가 입출력.)

 

(2) 2세대 운영체제 (1960년대 전반기)

- 트랜지스터 컴퓨터

- UNIVAC-Ⅱ, IBM 1400

- Assembly 언어의 등장, FORTRAN, COBOL 등 소개

=> 다중 프로그래밍 시스템(Multiprogramming System), 다중처리 시스템(Multiprocessing System),

     시분할 시스템(Timesharing System), 대화식 시스템(Interactive System) 등

     (모두 시스템의 여러 자원들을 효과적으로 운영하여 처리 능력을 높이고자 한 것)

다중 프로그래밍 시스템(Multiprogramming System)

: 다수 개의 작업이 같이 주기억 장치에 있도록 한 방식

* 일괄처리 시스템의 문제 해결-> CPU가 사용되지 않고 있는 경우, 바로 다른 작업을 처리할 수 있도록 조치해 줌.

이때, 모든 작업은 실행되기 위해 주기억 장치(Main Memory)에 있어야 한다.ㅡ 내장 프로그램 개념(Stored Program Concept)

다중처리 시스템(Multiprocessing System)

: 여러 개의 처리장치(Processor)(≒CPU)를 장착하여 동시에 여러 작업을 병렬로 실행하여 처리 속도를 최대한 높이는 방식

▶ 시분할 시스템(Timesharing System)

: CPU가 처리해줄 수 있는 시간을 작업 수에 맞춰 분할하여 각자에게 일정량만큼 분배하여 번갈아 처리하는 방식

▶ 대화식 시스템(Interactive System)

: 시스템과 사용자가 모니터와 입력 장치를 통해 마치 대화하듯이 일을 처리해나가는 방식

<참고!> 작업(job)=프로세스(process)=태스크(task)=스레드(thread)

★point! CPU의 능력을 얼마나 잘 활용하느냐!

 

(3) 3세대 운영체제 (1960년대 후반기~1970년대)

- 집적회로 개발(트랜지스터 대체) -> 하드웨어의 발전

- 다중모드 시분할 시스템(일괄 처리, 시분할, 실시간 작업을 모두 지원)

- TCP/IP 표준, 근거리 통신망(LAN)

- UNIX, LINUX 등장

 

(4) 4세대 운영체제 (1970년대 후반기~현재)

- 마이크로프로세서의 개발 -> 개인용 컴퓨터 본격적 보급

- 분산 및 병렬 처리 시스템

마이크로 프로세서(Micro-processor)

: 연산장치와 제어장치, 그리고 여기에 필요한 레지스터를 하나의 칩에 집적시켜 넣은 것

 

운영체제의 구성요소?

▶ "사용자 인터페이스(Interface)자원 관리(Resource Management)를 위한 프로그램의 집합"

- 사용자 인터페이스(쉘): 사용자나 응용 프로그램이 운영체제와의 의사소통, 다시 말해 정보 교환이나 운영체제로의 요청 창구로 필요한 요소.

(ex) 윈도우에서 그래픽 사용자 인터페이스의 도움을 받아 아이콘이나 메뉴를 클릭함으로써 프로그램을 실행시키거나 파일을 여는 등의 일을 하는 것.

- 자원 관리: 장치 (키보드, 모니터, 프린터, 하드디스크) / 파일 (디렉터리 관리ㅡ파일 생성, 수정, 제거)

                  / 메모리 (주기억 장치 관리ㅡ할당, 경계 설정) / 처리기 (CPU의 처리 능력 효과적 배분) 관리

 

커널(Kernel)유틸리티 프로그램(Utility Program)

- 커널(Kernel): 운영체제의 각종 기능들 중 사용자와 실행 프로그램을 위해 매우 빈번하게 사용되는 부분.

컴퓨터가 처음 부팅(Booting)될 때 주기억 장치에 적재되어 시스템의 운영이 종료(Shutdown)될 때까지 계속해서 주기억 장치에 남아있게 되는 부분.

=> 커널운영체제의 핵심! (핵, 관리자, 메모리 상주 프로그램이라 부르기도 함)

그렇다면 왜 커널이라는 것을 주기억 장치에 상주시킬까?

"운영체제 중 빈번히 사용되는 프로그램들을 실행시킬 때마다 주기억 장치로 불러들이면,

디스크와 주기억 장치 사이의 입출력이 반복되므로 많은 시간을 요구하게 되어 시스템 성능이 떨어진다."

그렇다면 운영체제 전부를 커널로 하면 안 되는가? 왜 유틸리티를 따로 떼어 냈을까?

"한정된 용량의 주기억 장치에 운영체제가 대부분을 차지한다면 남은 공간이 매우 줄어들어

사용자 프로그램이 효과적으로 실행되지 못할 것이기 때문이다."

=> 따라서, 운영체제의 프로그램 중 자주 사용되지 않는 부분은 디스크에 두고 필요할 때마다 주기억 장치로 넣어 실행시킨 후 다시 디스크로 보냄으로써 주기억 장치의 공간을 확보한다.

 

<참고>

- 사용자 인터페이스의 대부분이 유틸리티에 속한다.

- 커널과 유틸리티를 구분 짓는 명확한 기준은 없다.(설계자 기준에 따라 달라짐)

- ROM(Read Only Memory), PLA(Programmable Logic Array) -> 커널 중에서도 좀 더 빠른 실행이 요구되거나 높은 수준의 보호가 필요한 프로그램들을 마이크로-프로그래밍 하여 칩의 형태로 만든 것.

=> 얘네들을 펌웨어(Firmware)라 한다. 

*펌웨어(Firmware): 생긴 건 하드웨어이고 내부적으로는 프로그램인 형태를 일컫는 용어

 

듀얼 모드(Dual Mode)란?

유저 모드(User Mode)커널 모드(Kernel Mode)

(사용자 프로그램 간에, 그리고 사용자와 운영체제 프로그램 간에 설정된 영역을 보호하기 위함)

*유저 모드로 실행 중에 커널 모드에서 해야 할 일이 생기면 프로그램은 시스템 호출(System Call)을 하게 되고 이후 그 일을 해줄 운영체제 프로그램이 커널 모드에서 실행된 다음 다시 사용자 프로그램으로 복귀되도록 함.