운영체제에 대해 공부를 하고, 정리를 해보려고 합니다.
운영체제 : 대표인 시스템 소프트웨어
컴퓨터 시스템의 자원을 관리하고 컴퓨터 프로그램이 동작하기 위한 서비스를 제공하는 프로그램들의 모음
역할
- 컴퓨터 시스템의 자원 관리
- 자원 : 하드웨어 자원, 소프트웨어 자원, 데이터
- 사용자 지원
- 사용자가 내린 명령을 해석하여 실행함
- 사용자와 하드웨어 사이의 매개체 역할
- 사용자에게 편의성 제공 목적
커널모드(슈퍼바이저 모드) vs 사용자모드(보호모드)
- 커널모드 : 하드웨어를 직접 제어할 수 있는 cpu명령어를 사용할 수 있는 모드, 운영체제의 커널이 동작함
- 사용자모드 : cpu명령어 사용x, 응용 프로그램이 작동함
커널에는 일체형커널과, 마이크로 커널이 있다
일체형 커널은 우리가 아는 리눅스로, 커널 내부 요소들이 서로 효율적으로 상호작용을 한다. 단점은 한 요소가 에러가 터지면 시스템 전체에 장애가 발생한다.
마이크로커널은 운영체제 요소의 대부분을 커널 외부로 분리한다.
메모리관리, 멀티태스킹, 프로세스 간 통신(IPC) 등 최소한의 요소만 커널내에 남긴다.
- 장점 : 확장성, 유지보수용이, 안정성
- 단점 : 커널외부요소들 사이는 IPC가 필요하여 성능저하가 발생한다.
운영체제의 구성은 4가지로 나뉜다.
프로세스 관리자, 메모리 관리자, 파일 관리자, 장치 관리자
1. 프로세스 관리자
프로세스의 생성 및 삭제를 관리하고
CPU 할당을 위한 스케줄을 결정한다.
프로세스의 상태를 관리하며 상태 전이 처리한다.
2. 메모리 관리자
메모리 공간에 대한 요구의 유효성을 확인하고, 메모리 할당 및 회수, 메모리 공간을 보호한다.
3. 장치 관리자
컴퓨터 시스템의 모든 장치 관리
시스템 장치의 할당, 작동, 반환
4. 파일 관리자
컴퓨터 시스템 모든 파일 관리
저장장치의 공간 관리
파일의 접근 제한 관리
메모리 구조
Code 영역: 실행한 프로그램의 코드가 저장되는 메모리 영역
Data 영역: 프로그램의 전역 변수와 static 변수가 저장되는 메모리 영역
Heap 영역: 프로그래머가 직접 공간을 할당/해제하는 메모리 영역
Stack 영역: 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 임시 메모리 영역
운영체제의 유형은 4가지가 있다.
일괄처리 운영체제, 시분할 운영체제, 실시간 운영체제, 분산 운영체제이다.
1.일괄관리 운영체제 (Batch processing):작업을 모아서 순서대로 처리하는 방식
- 사람이 하던 일을 프로그램이 빠르게 처리 하게 되면서 전체적인 작업 처리 속도가 향상된다.
- 나중에 들어온 작업은 앞선 작업들이 모두 끝날때까지 아무 상호작용 없이 기다려야한다.
2.시분할 운영체제 (Time - sharing) : 각 사용자의 프로그램을 한 번에 조금씩 수행하는 방식 (대화형 운영체제)
- 사용자들은 마치 혼자 컴퓨터를 사용하는 듯한 느낌을 받음
- 응답시간이 일괄처리 운영체제보다 크게 단축됨
- 응답시간 : 요청한 시점부터 반응이 시작되는 시점까지의 소요시간
3. 실시간 운영체제 (Real-time) : 원하는 시간내에 프로그램의 결과를 얻을 수 있는 방식
- 처리결과가 현재의 결정에 영향을 주는 환경에서 사용됨
- ex) 미사일 제어 시스템, 증권거래 관리 시스템
- 중요한 작업에 대한 처리 기한을 맞추는 것이 중요
- ex) 우선순위가 높은 작업ㅇ르 우선 처리할 수 있는 기법 활용
4. 분산운영체제
분산시스템 : 2개 이상의 컴퓨터 시스템이 네크워크로 서로 연결되어 서로의 자원을 이요하는 시스템
다른 컴퓨터 시스템의 자원을 이용하는 것이 마치 자신의 컴퓨터 시스템에 있는 자원을 이용하는 것처럼 가능해야함
프로세스 : 실행중인 프로그램
- 프로세스: 동작을 하는 능독적 개체
운영체제로 부터 자원을 할당 받아 동작
- 자원 : cpu, 메모리, 입출력장치, 파일
- 동작 : cpu가 프로세스의 명령을 실행
운영체제가 처리하는 작업
- 프로세스를 생성 및 종료
- 프로세스를 실행시키기 위한 스케줄링 작업
- 프로세스의 상태 관리
프로세스의 구성 : 메모리 구조, 프로세스 제어 블록
- 프로세스 제어 블록
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
- 각 프로세스마다 존재
- 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
프로세스 상태 변화
전통적인 프로세스
- 하나의 프로그램을 실행하기 위한 기본적인단위
- 자원소유의 단위
- 하나의 메모리 구조
- 디스패칭의 단위
- 하나의 제어흐름
- 프로세스 내에서 다중처리는 불가능하다.
쓰레드 : 프로세스 내에서의 다중처리를 위해 제안된 개념, cf) 디스패칭의 단위: 프로세스
하나의 프로그램을 실행하기 위한 기본적인 단위
하나의 프로세스 내에는 하나 이상의 쓰레드가 존재한다.
전통적인 프로세스 vs 쓰레드 있는 프로세스
쓰레드는 실행에 필요한 최소한의 정보만 가진다. 예를들어 상태정보, 스택영역, 레지스터 값
나머지 정보는 프로세스에 두고 다른 쓰레드와 공유한다.
다중 쓰레드 :
멀티 CPU 또는 멀티코어 컴퓨터 시스템 : 다중 쓰레드를 병렬로 처리가능하다.
처리속도 별로 쓰레드가 나눠진 경우 효율적인 처리가 가능하다.
멀티 프로세스 VS 멀티 스레드
- 둘다 병렬처리 구현 하기 위한 방법
멀티 프로세스는 독립된 메모리 공간을 가진 프로세스들이 동시에 실행되는 방식
- 안전성과 보안성이 높다.
멀티 스레드는 하나의 프로세스 내에서 여러 스레드가 메모리를 공유하며 실행되는 방식
- 적은 메모리 공간 차지, 문맥 전환시 캐시 메모리 초기화 할 필요 없어 문맥교환이 빠르다.
- 전체 스레드가 종료될 위험이 있다.
스케줄링 : 여러 가지 작업의 처리순서를 결정하는 것
프로세스 스케줄링 : 주어진 프로세스가 여러개인경우, 프로세스 처리순서를 결정하는 것
스케줄링의 수행주체는 디스패처이다. CPU를 할당하는것을 말한다.
스케줄링의 기본 목표는 공정성 과 균형이다.
운영체제의 유형에 따른 스케줄링의 목표가 다르다.
- 일괄처리 운영체제
- 처리량의 극대화
- 반환시간의 최소화
- CPU활용의 극대화
- 시분할 운영체제
- 빠른 응답시간
- 과다한 대기시간 방지
- 실시간 운영체제
- 처리기한 맞춤
스케줄링의 목표에 따라 기본적인 정책을 고려해야하는데 2가지가 있다.
선점 스케줄링 정책, 비선점 스케줄링 정책
선점 스케줄링 : 하나의 프로세스가 CPU를 차지하고 있을때 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식 (문맥교환, 인터럽트)
- 응답이 빠르지만, 처리시간 예측이 힘들다
- 문맥 교환에 따른 오버헤드를 초래한다.
- 문맥(Context) : CPU 수행상태의 현 상태를 나타내는데 필요한 모든 요소
- 하드웨어문맥 : CPU수행 상태를 나태내고, PC와 각종 레지스터에 저장하고 있는 값들을 말한다.
- 프로세스의 주소공간 : 코드, 데이터, 스택 으로 구성된 프로세스만의 독자적인 주소공간 을 말한다.
- 커널상의 문맥 : 프로세스를 관리를 위한 자료구조인 PCB와 커널주소를 말한다.
- 문맥교환 :CPU 가 현재 실행하고 있는 프로세스의 문맥을 PCB에 저장하고 다른 프로세스의 PCB로부터 문맥을 복원하는 작업
- 즉 CPU가 다른 프로세스로 변경할때 발생하는 과정(멀티태스킹, 인터럽트핸들링, 사용자모드 커널모드 전환)
- 문맥(Context) : CPU 수행상태의 현 상태를 나타내는데 필요한 모든 요소
오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.
컴퓨터의 CPU는 1개 이지만 여러가지의 일을 해야한다. 그래서 빠르게 다른일도 같이 처리해야하는데 이때 이 전에 하던일(상태) 를 보관하고 새로운 프로세스 상태를 적재하는 작업이 필요하다
이때 저장해둔 프로세스의 문맥은 PCB에 기록되어있다.
PCB란 간단하게 말하면 Context(문맥)를 저장해 놓은 공간이라고 생각하면 된다.
PCB에 저장 되는것은 프로세스 상태, 레지스터 값, 스케줄링 정보, 등이 들어 있다.
우리가 컴퓨터를 사용하면서 alt + tab을 눌러본 경험이 많을텐데 이 또한 문맥교환이라고 생각하면 된다.
2. 인터럽트
실행중인 프로세스에 인터럽트를 걸고 다른 프로세스에 CPU를 할당할 수 있는 스케줄링 방식
높은 우선순위의 프로세스를 우선 처리해야 하는 경우에 유용하다
비선점 스케줄링 정책 : 실행중인 프로세스를 바로 준비상태로 전이시킬 수 없는 스케줄링 방식
- 즉 자원을 스스로 반납할 때까지 계속 그 자원을 사용하도록 허용한다.
FCFS : 비선점 방식, 큐에 도착한 순서대로 디스패치
들어온 순서대로 디스패치한다.
- 가장 간단한 알고리즘이다.
- 중요한 프로세스가 나중에 수행될 수 있는 단점이 있다.
SJF 스케줄링 : 비선점, 큐 에서 기다리는 것중에 가장 짧은 거 부터 디스패치
들어온 순서와 ,CPU싸이클이 작은 순서대로 Q에서 나오게 된다.
- 일괄처리 환경에서 구현하기는 쉽다
- 먼저 처리할 프로세스의 CPU 시간을 예상할수 없다.
- 중요한 프로세스가 나중에 수행 될 수도 있다.
SRT 스케줄링 : SJF 알고리즘의 선점, 기다리는 것중에 실행시간 짧은 순서
SJF 스케줄링과 동일하다, 하지만 새로운 프로세스가 들어올때 CPU사이클이 현재 진행중인 프로세스 보다 작은경우 컨텍스트 스위칭이 일어난다.
- SJF보다 평균대기시간, 평균반환시간에서 효율적이나
- SJF와 같이 CPU시간을 예상할 수 없고 각 프로세스의 실행시간 추적, 선점을 위한 문맥 교환 등 SJF보다 오버헤드가 크다.
RR 스케줄링 : 선점방식 준비큐에 도착한 순서대로 디스패치, 종료 못하면 마지막 배치
4씩만 싸이클 내리고 큐에 마지막으로 들어간다.
HRN 스케줄링 : 비선점 방식, 준비큐에서 기다리는 프로세스 중 응답비율이 가장 큰 것을 먼저 디스패치
댓글