(사이버 가디언즈에서 교육받은 내용을 정리한 글입니다.)
운영체제란?
사용자가 컴뮤터 시스템을 손쉽게 이용하도록 하고,
시스템자원 ex)기억장치,프로세서,입출력장치들 뿐만 아니라
나아가 정보와 네트워크까지 효율적으로 관리하도록 해주는
프로그램의 집합이다.
운영체제 위에서 응용프로그램,유틸리티프로그램등이 동작한다.
클라우드환경과 그 외의 대다수의 기반이 되는 "On promise"환경이 있는데, 요즘은 On promise를 기반으로 클라우드를 구축한다.
=가상환경 구동에도 OS는 필수적이다.
운영체제의 목적
- 편리성:
사용자가 프로그램의 개발,사용시에 보다 편리한 환경을 제공하는 것
ex)PC의 GUI환경 => "생산성 기여"
- 효율성:
한정된 자원을 효율적으로 사용하기 위해 각 프로그램들을 유기적으로 결합하여 시스템성능을 향상시킴
효율성의 요소
-처리 능력 향상: 단위시간내에 최대한 많은양의 일을 처리 ex) 멀티 쓰레딩
-응답 시간 단축: 사용자가 작업을 맡기면 최대한 빠른시간내에 완료
-신뢰도 향상: 하드위어(펌웨어),소프트웨어의 성공적인 기능수행을 보장
-사용가능도(가동률)향상: 사용자가 컴퓨터 시스템 사용 요구시 가장 신속
하게 사용 또는 사용가능빈도가 높음
운영체제의 기능
- 입출력 장치 관리 기능:
I/O Operation, 프로그램의 생성, 실행등
- 시스템 자원 관리: 메모리와 프로세스를 제어하여 프로그램에 cpu,램,데이터버스등의 시스템상의 자원을 할당
- 에러 검출과 조치
에러 발생에 따른 비정상적인 동작들에대한 조치와,오류 프로세스 탐지 및 제거, 잘못 할당된
- 시스템의 성능 감시
- 파일 시스템 조작
- 네트워크 관리
- 계정 관리
- 보호
이렇게 있는데, 운영체제의 기능을 2개의 대분류로 나눈다면,
- 자원관리:
메모리 관리(메인 메모리, 보조기억장치), 프로세스 관리, 주변장치 관리, 파일 관리
- 시스템관리:
시스템 보호(권한부여), 네트워크 관리, 명령어 관리(command interpreter)
운영체제의 구조
운영체제 5계층 = 커널(Kernel)
실제로는 하드웨어와 1계층사이에 HAL(hardware abstraction layer)이라고 하는 추상화 계층이 있는데 여기서 모든 프로그램을 실행하도록 설정할수있다 (찾아보니 다양한 하드웨어를 사용할 수 있도록 디바이스에 종속되지 않을수 있도록 해준다고 한다)
커널
하드웨어 특성으로 부터 소프트웨어를 독립시키고 하드웨어와 직접 상호작용을 함으로써 프로그램들에게 일관된 서비스를 제공할 수 있도록 한다.
핵심기능은 프로세스와 파일의 관리이며, 그 밖에도 I/O인터페이스 관리,메모리 관리,주변장치 관리등과 더불어 인터럽트 관리라는것을 수행하는데 인터럽트 관리란 지금 하던일을 멈추고 다음에 할 일을 결정하는 역할(인터럽트기능이 있기에 멀티태스킹이 가능하다).
응용프로그램에서 실행에 필요한 다양한 서비스를 제공하고 실행되는 프로세스를 스케줄링한다.
부팅시에 가장 먼저 읽혀져 메모리에 상주한다
좀더 자세히 알아보자면,
- 프로세스 관리
하드웨어에 의존되 가장 하위단계로, 프로세스 스케줄링을 통해 실행가능한 프로세스 추적 관리를 수행한다.
- 주기억장치 관리
rom,ram등의 주기억장치의 접근을 관리,제어하는 처리장치의 부분으로, 주소변환,기억보호, 버퍼기억등의 기능을 수행
- 보조기억장치 관리
하드디스크, USB나 SSD에 대한 접근관리,제어를 수행한다.
- 주변장치 관리
- 장치 구동기(device driver)
운영체제,하드웨어,응용프로그램 간의 인터페이스 담당 프로그램으로,
장치들을 제어하기위한 명령어 생성 및 적절한 수행여부를 점검한다.
- 데이터 입출력 방식
프로그램에 의한 입출력:
데이터의 입출력이 CPU가 수행하는 프로그램 I/O명령에 따라 수행되는 방식,CPU가 주변장치의 상태를 계속 감시해야함.그래서 Polling방식이라는게 나왔는데, 이는 입출력연산의 종료시점을 결정하는 기법이다.
인터럽트:
입출력장치가 데이터를 전송할 준비가 되면 CPU에 인터럽트를 발생시킴
DMA:
CPU를 거치기 않고 입출력장치와 메모리를 바로 연결한다. 고속주변장치와 컴퓨터사이의 데이터 전송에 사용된다.
I/O Channel:
가장 완벽한 입출력 방식이라고 불리며, 채널로 입출력을 분리시켜 입출력을 받으면서도 다른 프로그램을 실행할 수 있다.
버퍼링과 스풀링:
버퍼링은 입출력장치와 보조기억장치의 처리속도가 주기억장치의 처리속도보다 느린문제를 보완하기위해 CPU가 연산을 시작하자마자 보조기억장치가 다음 레코드를 미리읽어 cpu의 대기시간을 줄이는것이다
스풀링은 버퍼링과 기본적으로 같지만, 디스크를 버퍼로 사용한다.
운영체제의 기술발전 흐름
- 단순모니터 (1940년대)
그저 컴퓨터 오퍼레이터가 할 일을 자동으로 수행.(엄연히 따지면 이 때는 운영체제라고 할 수 없음)
- 일괄처리 시스템 (1950년대)
특정량이 될때까지 데이터를 축적했다가 한번에 처리한다.
보조기억장치가 느려서 처리속도가 느렸고, 여기서 고안된방법이 버퍼링,스풀링
- 다중프로그래밍 시스템 (1960년대)
주기억장치에 2개 이상의 프로그램을 적재하여,그 중 하나가 입출력작업등으로 cpu의 유휴시간이 생기면 운영체제가 다른 프로그램을 실행한다
- 시분할 처리시스템,TSS (1960년대)
프로세스마다 단위시간을 부여해 다중 사용자가 cpu를 순환하여 사용한다.
- 분산처리 시스템,DPS
하나의 대형컴퓨터가 수행하던일을 기능적,지역적으로 분리된 다수의 컴퓨터가 분담하여 처리하는것. 분산처리 시스템은 4가지 특징을 가지고 있는데
1. 자원공유
말그대로 같은 노드에 있는 컴퓨터들은 자원을 공유할 수 있다
2. 처리속도 향상
여러 노드에 부하를 분산시켜, 처리속도의 향상을 기대할 수 있다.
3. 신뢰성 향상
한 노드가 고장나도, 다른노드들이 있기 때문에 신뢰도가 높다.
4. 통신
같은노드끼리는 통신을 할 수 있다.
- 다중처리 시스템
여러개의 작업을 하나의 시스템(여러개의 cpu)에서 동시에 처리할 수 있는 시스템. 여러개의 프로세스가 메모리에 저장되어 자원이 할당될 때마다 다시 실행하면서 프로세스가 끝날때까지 메모리에 존재하는 시스템
따라서 자원을 어떻게 할당할지등의 연결기법이 중요하다.
- 실시간 시스템
단말기등에서 처리를 필요로 하는 데이터가 올때마다 즉시 처리한다.
은행,공장이나 비행기좌석등을 예약할때 쓰인다.자료가 무작위적으로 들어오기떄문에 입출력장치의 대기가 필요하다.
프로세스 관리
프로세스란, 현재 수행상태의 있는 프로그램으로 명령어,데이터,PC레지스터,복귀주소,저장된변수등 데이터 스택을 포함한다.
프로세스는 크게 4단계로 나뉘어지는데 순서대로
텍스트 영역,데이터 영역, Heap 영역, 스택 영역으로 나누어진다.
또한 프로세스의 상태변화는 7가지 상태가 있다.
- 생성(New) : 새로 만들어졌지만, 운영체제에 의해 아직 실행가능한 프로세스 집합에 포함되지 않은 상태
- 준비(Ready) : 프로세스가 메모리에는 올라갔지만, cpu를 기다리는 상태로, 언제라도 cpu에 의해 실행될 수 있다.
- 실행(Running) : 현재 cpu를 차지하여 동작중인 상태
- 대기(Block,Waiting) : I/O또는 특정이벤트로 인해 잠시 실행을 멈춘 상태
- 보류(Hold,Terminated) : 프로세스가 메모리에서는 내려가지않았지만, cpu에서의 동작은 끝난 상태이다
- 교착(Deadrock) : 하염없이 기다리는 상태를 의미하는말로 준비 상태에서 내려왔다면 suspended ready, 대기상태에서 내려왔다면 suspended waiting이라고 한다.
- 종료(Exit) : 모든작업이 끝나고 실행가능한 프로세스집합에서 나온상태.
그외에도 프로세스관리에는 여러가지 기능들이 사용된다.
- 프로세스 제어블록(PCB)
운영체제가 프로세스의 상태, PID, cpu 스케줄링, 프로세스 카운터등 프로세스에 대한 메타정보를 담고있다. 운영체제에서 프로세스를 중단하거나 재시작할때, PCB를 참조하여 결정한다.
- 쓰레드와 태스크
먼저 쓰레드는 프로세스를 하위 작업으로 나눈것으로 프로세스 스케줄링의 단위가 된다.
태스크는 자원 할당의 단위로 프로세스와 같은 개념이다
- 프로세스 스케줄링
다중처리 시스템에서 cpu에 어떤 프로세스를 할당할지 결정하는 문제이다.
그중에서 스와핑이라는 기능을 설명하자면, 메모리에서 프로세스를 제거하는게 효율적인경우, 프로세스를 제거하고 차후에 필요할경우 다시 메모리로 올려 중단지점부터 재개한다.