2024. 3. 24. 16:31ㆍCS/Operating System
OS란?
하드웨어와 소프트웨어 사이에 Architecture가 존재한다. 애플리케이션 계층에 있는 어떤 애플리케이션이던 실행시키려면 하드웨어가 어떻게 동작할지 관리해야 하는데, 이를 Architecture 시스템 소프트웨어가 도와준다. 그리고 그 위에 OS가 존재한다. OS가 어느 위치에 존재하는지 잘 알아야 한다.
애플리케이션 view에서 OS
- 프로그램을 위한 실행할 수 있는 환경 제공을 제공한다.
- abstract view를 제공한다.
- 프로세서를 스레드로 제공한다.
- 메모리를 Address spaces라는 가상의 메모리를 제공한다.
- 디렉터리, 파일들처럼 밑에서 동작하는 디테일은 모르는 채로 사용할 수 있도록 추상화된 시각을 제공한다.
- I/O 장치, 네트워크를 파일로 다룰 수 있게 해 준다.
시스템 view에서 OS
- CPU, Memory, I/O devices, Queues 등등의 컴퓨터 시스템의 다양한 자원들을 관리한다.
- CPU를 어떻게 공유할지, 메모리를 어떻게 나눠주고 보호할지, 어떻게 공평하고 효율적으로 나눌지를 관리하는 게 OS이다.
Event-driven software
OS는 event-driven software이다. 웹 서버처럼 시작하면 대기하고, 이벤트가 일어나면 처리해 주고 다시 대기하는 소프트웨어인 것이다. OS는 하드웨어 바로 위에서 하드웨어를 관리하고 어떻게 동작하는지 정한다. OS가 어디서 동작하는지 잘 알아둬야 한다.
또 OS는 Application을 비롯한 Software 계층 아래에서 소프트웨어의 요청을 받는다. CPU, Mem, I/O Devices를 통한 하드웨어 계층 위에서 하드웨어의 요청, 응답도 처리한다.
컴퓨터의 역사
1세대 컴퓨터는 단순한 계산기로 OS도 없고 소프트웨어라는 게 존재하지 않았다.
2세대에 트랜지스터가 등장하면서 Batch system을 사용했다. 한 번에 하나의 작업밖에 못하고 카드 리더기, tape 드라이브 같은 걸로 입력을 받아서 결과를 line printer로 출력하는 방식이다.
운영체제가 있긴 있었는데 프로그램을 받아서 연산을 수행하고 출력하는 역할만 했다. 카드 리더와 프린터 같은 I/O 때문에 굉장히 느렸다. 프로그램을 읽어 들이는 오랜 시간 동안 CPU는 할 일이 없었다. 그리고 CPU는 매우 짧은 시간만 동작하고 다시 I/O가 굉장히 오래 걸렸다. 즉, I/O 장치에서 발생한 bottleneck 때문에 CPU가 잘 작동하지 않았다.
3세대에는 IC칩이 나오면서 트랜지스터를 하나의 칩에 여러 개를 박아 넣었다. 하드 디스크와 On-line terminals가 등장했다. 여러 개의 프로그램을 돌리기 시작한 것도 이때부터이다.
Multiprogrammed systems가 가능해지면서 CPU의 활용도는 높아졌지만 운영체제 또한 복잡해졌다. 4개의 작업을 동시에 돌리는 중이라면 그 순서, 메모리 관리, CPU 스케줄링, 서로를 보호해 주는 문제들이 발생했다.
더 발전하면서 Time-sharing system이 만들어지고 응답 시간이 굉장히 좋아졌다. 그러면서 점점 OS가 복잡해졌다.
4세대는 현재 세대로 더 작아지고 빨라지고, 저장소는 더 커지고 빨라졌다. 그러다 보니 운영체제는 GUI(그래픽 UI), Multimedia(유튜브, 음악 등), Internet, network도 지원해야 한다.
OS는 처음 CTSS로 시작하였다. Compatible Time Sharing System의 약자이다. 그다음은 OS/360이 나왔다. 여기까지는 간단하지만 그다음에 나온 MULTICS, Unix부터 의미가 있다. MULTICS에서 사용한 개념의 대부분이 Unix에서 사용되고 Unix는 현재 사용하는 운영체제의 조상 격이다.
Multics - Multiplexed Information and Computing Service
- 일부 하드웨어에서 동작하는 운영체제를 만들기 시작했다.
- Multics는 당시 잘나갔던 회사, 대학이 모여 만든 대규모 프로젝트였다. 지금 사용하는 대부분의 운영체제 개념, 기능들이 이때부터 시작하였다.
- Hierarchical file system
- C드라이브 밑에 users 밑에… 이런 것처럼 hierarchical 구조를 이때 만들었다.
- 파일의 접근 권한에 대한 accesss control, 파일에 대한 링크 개념인 바로가기 Symbolic links, Storage quotas 개념들이 등장했다.
- segmentation과 paging을 포함한 virtual memory에 대한 관리가 많이 개발되었다.
- shell
- shell에서 프로그램을 실행시킬 수 있고 파일을 찾는 등 운영체제에 명령을 내릴 수 있다.
- Dynamic linking
- Dynamic linking은 프로그램에 printf 같은 함수를 부르면 라이브러리에서 printf를 불러온다. a.exe에 printf를 사용했을 때 컴파일 타임에 printf 기계어 코드가 포함된다면 static linking이다.
- dynamic linking은 a.exe에 printf 기계어 코드가 포함되지 않는다. 대신 표시해 두고 필요할 때 찾아가서 사용한다. dynamic linking은 a.exe의 용량이 작아지고 다른 b.exe, c.exe에서도 메모리에 printf를 한 번만 올려둬도 사용이 가능하다는 장점이 있다.
- high level lanuage
- 기존에는 어셈블리어로 개발을 하였다.
- high level 언어가 나오면서 OS에서 사용하였다.
- 공유되는 메모리를 관리하기 시작했다.
- logical disk를 physical volumes에 매핑시킬 수 있다.
- Multics Relational Data Store
- 최초의 관계형 DB이다.
- SQL과 매우 유사한 쿼리 언어가 존재했다.
- Spreadsheets
- 엑셀처럼 동작하고 Multics 플랫폼에서 개발되었다.
- 또 여러 언어와 컴파일러를 지원하였다.
Unix
Multics 개발원 중 한 명이 나와서 Unix를 만들었다. Unix의 몇 가지 특징을 보자.
- Hierarchical file systems
- process control
- shells
- signals
- C언어로 작성되었다. 어셈블리어로 작성되었다면 CPU를 비롯한 하드웨어에서 바뀌면 실행할 수 없다는 단점이 있다.
- 사용자들이 쉽게 수정할 수 있었고 자기만의 운영체제로 바꿔서 사용할 수 있었다.
Multics vs Unix
Multics
- Top-down appraoch를 취했다.
- 위에서부터 설계해서 내려오면서 작업을 하다보니 하드웨어가 너무 비싸지고 복잡했다.
Unix
- Bottonm-Up 방식으로 접근했다.
- 필요한 부분만 개발하는 방식이다.
- 사용이 간단하고 쉬워졌다.
- 현대 OS의 뿌리가 되었다.
'CS > Operating System' 카테고리의 다른 글
[OS] 프로세스의 단점과 쓰레드의 도입, 멀티 쓰레딩의 장점 (0) | 2024.04.09 |
---|---|
[OS] Zombie & Orphan process와 PCB, Context Switch, fork (1) | 2024.04.03 |
[OS] 프로세스의 개념과 생성, fork 시스템 콜 (0) | 2024.04.02 |
[OS] I/O에서 데이터 전송 방식과 Timers, Protected Instruction (1) | 2024.04.01 |
[OS] 운영 체제의 내부 구조와 이벤트들 - Interrupt, Exception, Signal (0) | 2024.03.31 |