운영체제
운영체제의 소개 및 구조 [운영체제]
소프트웨어 학부생의 개발 도전기
2024. 3. 24. 18:29
1. 운영체제의 소개
운영체제(OS : Operating system)
- 하드웨어를 관리하는 소프트웨어
- 사용자 또는 애플리케이션에게 하드웨어를 제어할 수 있도록 인터페이스 제공하는 소프트웨어
- 사용자 또는 어플리케이션은 커널을 통해서만 하드웨어를 제어할 수 있음 - Unix, Linux, macOS, Windows
- 모바일 OS
- 스마트폰과 태블릿 PC에서 사용되는 애플의 iOS, 구글의 안드로이드
임베디드 OS
- 내비게이션, 스마트 시계, 스마트 TV 등 CPU 성능이 낮고 메모리 크기 작은 시스템에서 사용됨
어플리케이션은에 속하는 GUI/CLI 애플리케이션, 유틸리티, 쉘(shell), 라이브러리 등은 커널이라는 OS를 거쳐서 하드웨어를 제어할 수 있다.
2. 운영체제의 역할
2.1 하드웨어 관리
- 여러 어플리케이션이 하드웨어를 효율적으로 사용할 수 있도록 관리
2.2 하드웨어 보호
- 악의적이거나 미숙한 사용자로부터 하드웨어를 보호하여 OS의 안정성 보장
인터페이스인 커널을 통해서만 하드웨어에 접근 -> 그래야만 OS 안정성 보장! (OS ≒ 커널)
2.3 하드웨어 인터페이스 제공
- 악의적이거나 미숙한 사용자로부터 하드웨어를 보호하기 위해 하드웨어를 일관된 방법으로 다룰 수 있도록 인터페이스 제공
- 시스템 콜(System call) -> 함수 (커널을 사용해 하드웨어에 접근하기 위해서는 시스템 콜 활용)
2.4 사용자 인터페이스 제공
- 사용자가 OS를 편리하게 사용할 수 있도록 GUI(Graphic user interface)또는 CLI(Command line interface)어플리케이션 제공
3. 운영체제의 역사
3.1 초창기 컴퓨터(1940년대)
- 펜실베이니아 대학의 존 모클리와 존 에커트가 만든 에니악
- 진공관이 켜지면 1, 꺼지면 0으로 판단함
- 컴퓨터가 이진법을 사용하는 계기가 됨 - 1800개의 진공관을 전선으로 연결하여 프로그램을 구현
- 운영체제는 사용되지 않음
3.2 일괄 작업 시스템(batch job system : 1950년대)
- 진공관과 전선으로 구성된 논리회로를 아주 작은 크기의 IC(integrated circuit) 칩으로 구현
- CPU와 메모리가 사용됨
- 입출력 장치로써 키보드와 모니터 대신 천공카드 리더(punch card reader)와 라인 프린터(line printer)가 사용됨
- 천공카드 : 카드에 구멍을 뚫어 문자나 숫자를 표현
- 라인 프린터 : 한 번에 한 줄씩 문자나 숫자를 인쇄하는 프린터
- 당시에는 한 번에 한 가지 작업만 실행가능하기 때문에 이러한 문제를 해결하기 위해 여러 개의 작업을 단일 작업으로 묶어서 일괄 처리
- 다수 개의 프로그램을 읽어 저장해놓되, 한번에 한개씩 프로그램을 실행시키는 방식
- 작업이 차례로 하나씩 실행되므로 어떠한 작업이 완전히 끝날때 까지 다른 작업은 기다려야 한다
- 중간 개입이 허용되지 않는다.
- 위에서 천공 카드를 천공 카드 리더를 통해 입력하면 프로그램 실행 결과가 라인 프린터를 통해 출력됨
- 프로그램 실행 중간에 데이터를 입력하거나 실행 과정을 확인할 수 없음 - 시스템 자원을 독점하여 CPU 유휴 시간이 줄어든다
- 하지만, 프로그램을 메인 메모리에 하나만 올려놓는다면(다중 프로그래밍이 아닌 경우), 입출력과 같은 시간이 CPU의 작업이 굳이 많이 필요하지 않은 작업(ex, IO)에서는 CPU가 하나의 작업에 메여있어 상당히 낭비되는 편
- 메인 메모리는 OS영역과 사용자 영역으로 나뉨
3.3 대화형 시스템(interactive system : 1960년대 초반)
- 키보드와 모니터를 통해 프로그램 실행 중간에 데이터를 입력하거나 실행 과정을 확인 가능
- 일괄 작업 시스템의 단순 계산 작업 뿐만 아니라 문서 편집기, 게임과 같은 다양한 종류의 응용 프로그램을 실행이 가능해짐
- 다중 작업용 운영 체제의 경우 여러 프로그램들을 같이 수행시켜도 사용자 입장에서는 각 프로그램에 대한 키보드 입력의 결과를 곧바로 화면에 보여 주기 때문에 이러한 시스템을 대화형 시스템이라고도 한다.
3.4 시분할 시스템(time sharing system : 1960년대 후반)
- CPU 사용 시간을 잘게 쪼개서 작업들에게 나누어 줌
- 동시에 여러 작업이 실행 가능하는 시스템(multi-process, multi-task system)
ex) CPU 사용시간을 A작업에 0.1초를 할당하고 그 다음 B 작업에 0.1초를 할당하고 그 다음 C 작업에 0.1를 할당하고 이와 같은 방법으로 다시 A작업 부터 CPU 사용 시간을 할당하면 A,B,C 작업은 동시에 실행되는 것 처럼 보임
- 동시에 여러 사람이 사용 가능하는 시스템 - Unix, Linux, Windows는 multi-process, multi-user system
- 시분할 시스템 덕분에 동시에 여러 프로그램 실행 가능
- 프로그램이 여러 개 수행될 때 프로그램들은 CPU와 메모리를 공유하게 되는데, 일반적으로 CPU는 컴퓨터에 하나밖에 없다. 다중 작업용 운영 체제여도 CPU에서는 매순간 하나의 프로그램만이 수행되는 것이다. CPU 처리속도가 빨라 여러 프로그램들이 짧은 시간에 번갈아 수행되기 때문에 사용자 입장에서는 여러 프로그램이 동시에 수행되는 것처럼 보이게 된다.
3.5 분산 시스템(distributed system : 1970년대 후반)
- PC와 인터넷이 보급되면서 값이 싸고 크기가 작은 컴퓨터를 인터넷을 통해 하나로 묶어서 대형 컴퓨터의 성능에 버금가도록 구현된 시스템
- 대형 컴퓨터를 대신하여 복잡한 계산이나 많은 양의 데이터를 처리하기 위해 사용됨
- 네트워크 상에 분산되어 있는 작은 컴퓨터들이 대규모 데이터 연산을 소규모 연산으로 나눠서 분산 및 병렬 처리하고 그 내용이나 결과를 서로 교환 - 분산 시스템의 장점
- 네트워크로 연결된 컴퓨터 간의 여러 자원 공유
- 작업 분배(load balancing)을 통해 여러 컴퓨터가 작업을 나누어 분산 및 병렬 처리 가능
- 분산 및 병렬 처리로 인한 연산 속도 향상 - 분산 시스템의 예
-seti@home 프로젝트
> 지구 밖의 신호를 여러 대의 컴퓨터가 작업을 나누어 분산 및 병렬 처리한 다음 중앙의 컴퓨터로 보내서 외계 지적 생명체의 존재를 파악
3.6 클라이언트/서버 시스템(client/server system : 1990년대~현재)
- 작업을 요청(request)하는 클라이언트와 요청 받은 작업을 처리하여 응답(response)하는 서버로 구성됨.
- 웹 시스템은 전형적인 클라이언트/서버 시스템
3.7 P2P 시스템(peer-to-peer system : 2000년대 초반 ~ 현재)
- 클라이언트/서버 시스템을 통해 MP3 음악 파일과 같은 대용량 파일을 공유하면 서버 과부하 발생
- 위와 같은 문제를 해결하기 위해 서버를 거치지 않고 사용자 컴퓨터(peer)들을 직접 연결하여 구현
3.8 기타 시스템(2000년대 초반 ~ 현재)
- 그리드 컴퓨팅(grid computing)
- 비용을 지불한 뒤 필요한 계산 자원(CPU, 메모리, 저장장치)를 인터넷을 통해 사용 가능한 시스템
- 분산 시스템의 한 분야로써 서로 다른 기종의 컴퓨터를 묶어 대용량의 컴퓨터 풀(pool)을 구성하여 대용량 연산을 수행하는 컴퓨팅 환경
- 일반인을 위한 시스템이기 보다는 연구용이나 상업용
- IaaS(infrastructure as a service)
- 서비스형 인프라스트럭처
- 비용을 지불한 뒤 필요한 서버를 운영하는데 필요한 컴퓨터 하부구조(infrastructure)을 인터넷을 통해 사용 가능한 시스템
> 서버를 운영하는데 필요한 서버, storage, 네트워크, 전력 등을 서비스 함
- 컴퓨터 하부구조의 설치, 업데이트, 별도의 라이선스 비요을 지불할 필요가 없음
- ex) Microsoft Azure, AWS EC2, google Computer Engine(GCE)
- PaaS(Platform as a Service)
- 서비스형 플랫폼
- 비용을 지불한 뒤 필요한 개발 환경(개발 플랫폼)을 인터넷을 통해 사용 가능한 시스템
- 개발 환경의 설치, 업데이트, 별도의 라이선스 비용을 지불할 필요가 없음
- ex) Microsoft Azure, AWS Lamda, Google App Engine(GAE), Google Colab
- SaaS(Software as a Service)
- 서비스형 소프트웨어
- 비용을 지불한 뒤 필요한 소프트웨어를 인터넷을 통해 사용 가능한 시스템
- 소프트웨어의 설치, 업데잍, 별도의 라이선스 비용을 지불할 필요가 없음
- ex) Microsoft 365, iCould, N드라이브, Google Drive, Google Photo, Google Docs
- 클라우드 컴퓨팅(cloud computing)
- 그리드 컴퓨팅과 Iaas, PaaS, SaaS을 합쳐 놓은 형태
- 비용을 지불한 뒤 필요한 계산 자원과 소프트웨어를 인터넷을 통해 사용 가능한 시스템
> 하드웨어와 소프트웨어 구입, 관리 및 유지 비용을 줄여 줌
- 예 : AWS(Amazon web service), Microsoft Azure, Google Cloud Platform(GCP)
SaaS 는 일반적인 소프트웨어까지 다 지원 해준다.
4. 운영체제 구조
4.1 운영체제는 커널과 어플리케이션으로 구성됨
4.2 커널(kernel)
- 운영체제의 핵심으로써 운영체제를 규정짓는 가장 중요한 부분
- 하드웨어 관리
- 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력(I/O)관리, 프로세스 간 통신(IPC)관리 - 어플리케이션이 커널을 통해 하드웨어를 제어할 수 있도록 하는 커널에 요청하는 함수인 시스템 콜(system call) 제공
- 시스템 콜의 예 : open, read, write, fork, exe, stat, unlink
- 사용자 또는 어플리케이션은 시스템 콜을 통해서만 하드웨어를 제어할 수 있음 - 커널이 하드웨어를 제어하는데 사용되는 프로그램인 디바이스 드라이버를 포함
4.3 어플리케이션
- 쉘(shell)
- 명령어 해석기
> 사용자가 입력한 명령어를 해석하여 커널에 전달함
- 종류
> 초창기의 기본 유닉스 쉘인 Bourne shell(sh), BSD 유닉스에서 사용되었던 C shell(csh), korn shell(ksh), sh과 csh의 장점을 취한 Bourne again shell(bash) - GNU에서 개발한 한 유틸리티(gcc, gdb, make 등) 와 라이브러리(glib 등)
- 콘솔이나 터미널을 통해 쉘과 유틸리티를 사용할 수 있게 하는 CLI(command Line interface) 어플리케이션 제공
- 유닉스의 표준 GUI 시스템인 X window system 을 기반으로 GUI 인터페이스인 GNOME 또는 KDE
- GUI 어플리케이션 제공
5. 커널의 기능
5.1 하드웨어 관리
- 메모리 관리, 프로세스 관리, 파일 시스템 관리, I/O관리, IPC 관리
기능 | 설명 |
프로세스 관리 | 프로세스에게 CPU를 할당 [참고] 프로세스 : CPU와 메모리를 사용하여 실행 중인 프로그램 |
메모리 관리 | 프로세스에게 메모리를 할당하고 실제 메모리보다 큰 가상 메모리 제공 |
파일 시스템 관리 | ● 파일의 저장, 삭제, 읽기를 용이하도록 하고 관리하고 파일에 대한 접근 제어(보안) 기능 제공 ● 파일을 저장하는 저장 장치(HDD, SSD, CD, USB 메모리) 내에 존재 - 디스크를 여러 파티션으로 나눠서 각각 파일 시스템을 설치한 뒤 각 파티션을 사용 - 리눅스 : minix, ext, ext2, ext3, ext4, vfat, iso9660, jfs, xfs, nfs 등의 파일 시스템 사용 - Windows : FAT, NFTS 등의 파일 시스템 사용 |
I/O 관리 | ● 입출력 장치(키보드, 마우스, 모니터, 프린터) 와 저장 장치(HDD, SSD, CD, USB메모리)을 통한 데이터 입출력 관리 ● 리눅스 : 입출력 장치와 저장 장치를 파일로 취급 - 블록 디바이스 파일 : 저장 장치로써 블록 단위로 데이터 전송 - 문자 디바이스 파일 : 입출력 장치로써 문자 단위의 데이터 전송 스트림 파일 <------------------------------>프로세스 |
IPC 관리 | ● IPC(inter-process communication) 환경 지원 ● 파이프(pipe) : 프로세스간 단방향 데이터 통신 (메모리를 바이트 단위로 관리) ● 소켓(socket) : 프로세스간 양방향 데이터 통신 |
6. 커널의 종류
6.1 단일형 구조 커널
- 커널의 기능들이 모듈화 되어 있지 않고 하나로 구성됨
- 한 함수에서 거의 모든 커널의 기능들을 구현함 - 초기의 유닉스 운영체제, MS-DOS
- 장점
- 커널의 기능들이 모듈화 되어 있지 않으므로 모듈 간의 통신 비용이 없음 - 단점
- 커널의 기능들이 모듈화 되어 있지 않으므로 아래와 같은 문제 초래
> 유지, 보수 및 오류를 처리하기 어려움
> 기능 간의 상호 의존성이 높아 에러에 취약함
> 낮은 이식성(다양한 환경의 시스템에 적용이 어려움)
6.2 계층형 구조 커널
- 비슷한 커널의 기능들이 하나의 모듈로 묶여서 하나의 계층을 만들고 계층 간의 통신을 통해 커널을 구현
- 오늘날의 대부분 운영체제
- 장점
- 커널 기능에 대한 모듈화를 통해 단일형 구조보다 커널의 유지, 보수 및 오류를 처리하기 용이해짐
> 예 : 오류가 발생하면 해당 계층만 수정하면 됨 - 단점
- 다양한 커널의 기능들과 계층의 추가로 커널의 크기가 커질 수 있음
6.3 마이크로 구조 커널
- 계층형 구조 커널의 크기가 방대해짐에 따라 커널의 가장 기본적인 기능만 제공하는 마이크로 구조 커널이 소개됨.
- 대표적인 운영체제 : 마크(Mach), macOS, iOS
- 높은 이식성 제공
- 커널이 가벼워서 CPU 용량이 작은 시스템에 적용 가능
참고자료 : 강의자료