복습
운영체제 자체는 특별한 일을 하지 않는다.
하지만 운영체제가 없는 컴퓨터는 존재할 수 없다. (마치 정부가 없는 국가)
운영체제는 자원관리자/ 자원할당자라는 이름을 붙일 수 있다.
운영체제의 역할 2가지
- 성능 개선 (운영체제가 좋으면 성능이 좋아짐)
- 사용자에게 편리성 제공
운영체제의 역사
컴퓨터는 언제 만들어졌는가?
컴퓨터는 1940년대 말, 2차 대전 중에 만들어졌다.
컴퓨터의 역사가 이때부터 시작하면서 하드웨어도 같이 발전했고 동시에 운영체제 기술도 점차 발전.
NO O/S
1940-50년대 : 운영체제가 존재하지 않았다.(No O/S)
맨 처음 컴퓨터의 모습은?
지금과는 매우다르다.
옛날의 컴퓨터는 너무 커서 책상위에 둘 수 없었고, 아예 한 건물 안에 컴퓨터가 들어있었다.
그 건물에서 가장 큰 규모를 차지하는게 입력장치로서 카드리더(카드를 읽어들이는 것)였다. 옛날에는 OCR(구멍을 뚫은 종이카드)을 카드리더 위에 올려두면 카드리더가 카드 내용을 읽고, 처리기(processor)가 처리한 후 그 내용을 프린터에 찍었다. 지금은 잉크 프린터, 레이저 프린터가 있지만 옛날에는 라인 프린터만 존재했다. 라인 프린터는 망치로 종이를 두드리는 원리여서 매우 시끄러웠다.
프로그래머들이 종이에 연필로 프로그램을 적어서 전산실에 넘겨주면, 카드에 프로그램 모양대로 구멍을 뚫고, 카드 리더가 그것을 읽어서 처리기 안에 있는 메모리 영역에 적재시킨다. 메모리에 적재된 프로그램은 카드리더에서 내리고, 컴파일러 프로그램이 들은 카드를 카드리더에 올리면 메모리에 아까 적재시킨 프로그램 뿐만 아니라 컴파일러도 올라간다. 컴파일러가 프로그램을 번역하면 기계어가 나오고 처리기가 기계어를 처리해서 결과가 프린터에 찍힌다.
예) 프로그램이 Y = X + Z 면 이 모양대로 종이에 구멍을 뚫고, 카드리더가 저 내용을 읽는다.
이때는 컴퓨터를 사용하는게 워낙 복잡해서 일반인은 사용하지 못했고, operator라는 직업이 따로 존재했다.
이런 과정을 사람이 하지 않고 기계가 스스로 할 수 없을까? → O/S 등장
batch processing (일괄처리) : 최초의 O/S
소스코드 카드를 카드리더에 넣어서 메모리에 적재하고, 컴파일러를 카드리더에 넣어서 메모리에 적재하고, 이런 일련의 과정들을 operator가 손으로 하는게 아니라, 애초에 메모리에 컴파일/링크/로드 하는 프로그램을 넣어두자
→ 이게 바로 일괄 처리 시스템이고, 이것을 resident monitor(메모리에 상주하는 모니터) 라고 부른다.
Multiprogramming system (다중 프로그래밍)
그 후, 메인 메모리 이외에 하드 디스크가 개발되었다.
하드웨어 기술이 발전함에 따라 메모리가 굉장히 커지면서 O/S에도 큰 변화가 생겼다. 메모리가 굉장히 커지면서 메모리에 O/S 프로그램과 User program (컴파일러/링크/게임/,...) 프로그램이 올라갈 수 있게 된 것이다. 이에 따라 Multiprogramming 멀티프로그래밍이 가능하게 되었다.
User program 처리 과정?
메모리에 User program은 1개만 올릴 수 있었다.
CPU 동작 (계산) > IO (화면에 입출력) > CPU 동작 > IO 동작 > …
CPU는 빠른데 IO는 느리기 때문에, IO가 동작할때 CPU가 놀게 된다. (idle 하고 있다 = 아무것도 안하고 놀고 있다.)
컴퓨터가 굉장히 비싸기 때문에 CPU가 놀고 있으면 안된다.
이것을 해결하기 위한 방법이 뭘까?
메모리에 user program 1개가 아니라 여러개의 프로그램을 올리자!
user program 1, user program 2, user program 3 를 메모리에 올려놓으면,
CPU : user program 1 → user program 2 → user program 3
IO user program 1 → user program 2 → user program 3
CPU가 idle 하는 시간이 대폭 줄고, 사용량이 증가할 수 있다.
이처럼 메인 메모리에 여러개의 프로그램을 올린 것을 다중프로그래밍이라고 한다.
메인 메모리에 여러개의 프로그램이 있을 때 어떤 순서로 실행하는게 좋을까?
운영체제의 목적(역할)은 성능향상이다.
user program 1→2→3 순서와 user program 2→1→3 순서의 성능은 다르다. 성능이 더 좋은 순서로 실행되도록 하는게 CPU scheduling이다. (다음 강의에서 자세하게)
user program 배치를 어떻게 해야할까?
user program 1, 2, 3을 붙여서? 띄워서?
새로운 프로그램을 메모리의 어느 위치에 넣는게 좋을까?
→ 멀티 프로그래밍이 생겨나면서 메모리 관리도 신경쓰게 되었고, 프로그램이 여러개라 다른 프로그램 영역까지 침범할 수도 있기 때문에 보호 개념도 나오게 되었다.
Time-Sharing system (시공유 시스템)
1960-70 년대
우리가 아는 모니터(CRT 모니터)와 키보드라는 것이 등장했다.
이에 따라 컴퓨터와 사람이 interactive(상호작용)가 가능해졌다. 사람이 명령을 내리면 컴퓨터가 답을 내주는게 가능해진 것이다. (상호대화형)
대화형 컴퓨터를 지원하려다 보니, 컴퓨터 모양이 바뀌었다.
옛날에는 컴퓨터 한대에 여러 개의 단말기(terminal)를 연결해서 단말기에 모니터와 키보드(단순 입출력장치)를 연결시켰다. 여러명이 멀티프로그래밍으로 한 대의 컴퓨터(CPU가 한 개)를 사용했기 때문에 user1이 CPU를 사용할 때 user2, user3 는 CPU를 이용하지 못하는 문제가 발생했다.
이것을 해결하기 위한 방법이 뭘까?
1/100 초마다 user를 스위칭 해주자.
user program1이 CPU 동작을 마치고 IO 동작을 시작할 때 CPU를 user program2 에게 넘겨주는게 아니라, 시간에 따라 CPU에 할당된 user를 바꾸는 것이다.
즉, user1이 CPU를 1/100초 사용하고 나면, CPU가 user2에게 할당되고, user2가 CPU를 1/100초 사용하고 나면 CPU가 user3에게 할당되고, user3이 CPU를 1/100초 사용하고 나면 다시 user1에게 CPU가 할당되는 것이다.
그럼 1초동안 모든 user (user1, user2, user3)에게 CPU가 33번씩 할당될 수 있어서 마치 혼자 컴퓨터를 사용하는 것처럼 느껴진다. 따라서 비록 컴퓨터는 한대지만 동시에 여러 사람이 이용할 수 있게 된다.
일정 시간이 지나면 강제 전환(스위칭) 하기 때문에 대화형 시스템도 가능해졌다. (명령을 내리면 바로 응답받는 것)
이에 따라 여러 기술도 새로 등장하였다. 예를 들어, 하나의 컴퓨터를 여러명이 사용함으로써 user1이 user3에게 데이터(메세지)를 보낼수도 있게 되었다. 즉, 프로세스 간 통신이 가능해진 것이다. 그리고 user program 1, 2, 3이 동시에 실행되다 보니 1, 2, 3 중 누가 앞설지를 결정해야 됐는데, 이것을 동기라고 한다.
메인 메모리는 작은데, 사용자가 많아지면 메인 메모리가 부족해진다. 이걸 어떻게 해결할까?
그래서 나온 새로운 기술이 가상 메모리(virtual memory)이다. 이미 하드디스크가 보편화 돼있는데, 하드디스크의 일부를 마치 메인 메모리마냥(사실은 아님) 사용하는 기술이 나온 것이다. 가상 메모리를 통해 CPU가 보기에는 메인 메모리가 굉장히 커보이게 된다.
60 말- 70년대 나온 대표적인 time-sharing system이 Unix이다. (지금의 Linux 리눅스)
우리가 사용하는 스마트폰 안에도 time-sharing system이 있다. (1초동안 스위칭이 여러번 일어나기 때문에 동시에 여러가지 일을 할 수 있는 것)
운영체제는 가상메모리, 프로세스간 통신, 동기화 등을 통해 성능 향상을 이룬것이다.
OS 기술 천이(이동)
컴퓨터가 얼마나 강력한가? 규모별로 분류해보면,
- Supercomputer > Mainframe > Mini > Micro (1970-80년대)
- Supercomputer > Server > Workstation > PC > Handheld > Embedded
고성능 컴퓨터(대형 기종, Supercomputer / Mainframe 등)의 OS 기술(batch, multi, timesharing)이 Mini / Workstation 을 거치고 PC를 거쳐 Handheld / Embedded 까지 천이됐다.
고등 컴퓨터 구조
타임쉐어링보다 더 진보된 운영체제도 나오긴 했지만, 주로 TimeSharing 에 대해 공부할 예정.
'운영체제 OS (Operating System)' 카테고리의 다른 글
[운영체제] #03-2 운영체제 서비스 (0) | 2021.08.01 |
---|---|
[운영체제] #03-1 이중모드, 하드웨어 보호 (0) | 2021.07.30 |
[운영체제] #02-3 고등운영체제, 인터럽트 기반 운영체제 (0) | 2021.07.20 |
[운영체제] # 02 - 1 운영체제 서론 / 운영체제 정의와 역할 (0) | 2021.06.23 |
[운영체제] 운영체제 강의 추천 / 공부 / 도입 / 기초 (0) | 2021.06.23 |