공부방
운영체제 본문
운영체제(OS, Operating System)란?
- 하드웨어 바로 윗단에 설치되는 소프트웨어
- 사용자의 하드웨어, 시스템 자원을 제어하고 프로그램에 대한 서비스를 지원
운영체제의 기능과 역할
- 자원관리
- 자원보호
- 인터페이스 제공
운영체제의 구조
- 커널과 인터페이스
- 인터페이스를 통해 사용자와 소통
- 운영체제의 핵심적인 기능들은 커널 안에 존재
- 시스템 콜
- 사용자의 직접 접근 차단
- 사용자 모드와 커널 모드를 구분해서 명령어를 실행
- 중요한 명령어는 커널모드만 사용할 수 있도록 제한
- 드라이버
운영체제와 하드웨어 사이의 인터페이스
운영체제의 분류
- 싱글 태스크 : 한번에 하나의 작업만 처리
- 멀티 태스크 : 한번에 여러 개의 작업 처리 가능
- 일괄 처리(batch processing) : 작업이 주어지며누 바로 처리하지 않고 일정량 모이면 처리, 응답 시간 느림
- 시분할(time sharing) : 여러 작업을 처리할 때 아주 작은 단위로 쪼개서 번갈아가며 처리, 응답시간이 빠름
- 실시간(real time) : 정해진 시간(데드라인) 내에 반드시 작업이 종료됨을 보장
- Hard : 시간 제한 위반시 위험한 사건 발생
- Soft : 시간 제한 위반해도 위험하지 않음
컴퓨터 시스템의 구조
내부 장치
- CPU
- 메모리
외부 장치
- 입출력(I/O)장치
- 키보드
- 모니터
- 프린터
- CPU에도 레지스터라는 저장장치 존재
- 하지만 용량이 매우 작아 정보를 메모리에 저장해두고 필요한 정보를 메모리에서 읽어옴
CPU와 입출력
- 컴퓨터에 대한 연산은 CPU가 처리한다.
- 그러나 I/O 장치의 연산을 CPU가 처리하지는 않음. I/O 장치 각각의 컨트롤러가 처리
인터럽트
CPU가 프로그램을 실행하고 있을 때 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려서 처리할 수 있도록 하는 것
인터럽트 사용 이유
- CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때
I/O 연산 처리, 어떤 프로그램이 CPU를 너무 오래 사용하고 있다거나, 오류 발생
인터럽트 종류
- 하드웨어 인터럽트
- 소프트웨어 인터럽트
하드웨어 인터럽트
- 하드웨어(I/O 장치) 컨트롤러가 CPU의 서비스를 받기 위해 발생시킨 인터럽트
- 외부 인터럽트
소프트웨어 인터럽트
- CPU 내부에서 발생한 인터럽트
- 프로그램에서 예외 발생
프로그램에 허용되지 않은 연산을 하려고 하면 발생(0으로 나누기, 프로그램에 허용되지 않은 메모리 영역 참조 등) - 특별한 상황 발생(시스템 콜, System call)
사용자 프로그램이 운영체제의 서비스를 요청할 때, 사용자 프로그램은 직접 특권 명열을 실행할 수 없으므로 운영체제의 커널 호출 - 인터럽트를 발생시킨 주체가 소프트웨어
인터럽트 처리 과정
인터럽트 처리 루틴
- 인터럽트 벡터
여러가지 인터럽트에 대해 해당 인터럽트가 발생했을 때 실행해야 할 서비스 루틴의 주소 테이블 - 인터럽트 서비스 루틴(언터럽트 핸들러)
실제 인터럽트를 처리하기 위한 절차(기계어 코드), 운영체제마다 이미 프로그래밍 되어 있는게 대부분
프로세스 관리
프로세스
실행중인 프로그램
프로그램vs프로세스
- 프로그램 : 보다 정적인 개념, hdd나 ssd에 저장된 실행 파일을 의미
- 프로세스 : 보다 동적인 개념, 컴퓨터의 자원(cpu, 메모리)을 할당 받아서 실행중인 프로그램을 의미
디스크에 있는 프로그램이 메모리에 로드되면 프로세스가 된다.
프로세스의 상태
프로세스 상태
- New : 프로세스가 새로 생성된 상태
- Ready : 프로세스가 CPU에 할당되기를 기다리는 상태(실행 준비 완료)
- Running : 프로세스가 CPU에 할당되어 명령을 실행하는 상태
- Watitng : 프로세스가 I/O나 어떠한 이벤트를 기다리는 상태, CPU를 할당해도 당장 실행 불가능
- Terminated : 프로세스가 실행을 마쳤을 때, 아직 완전히 제거되지는 않음
프로세스의 구조
프로세스 제어 블록(PCB)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스 별로 보유하고 있는 정보 묶음
- 커널에 존재
가지고 있는 정보들
- 프로세스 ID : 프로세스 식별자
- 프로그램 카운터 : 실행해야 할 명령어의 주소를 가리키는 포인터(프로그램의 몇 번째 줄을 실행?)
- 프로그램 스택(함수 호출, 재귀 함수)
- 레지스터의 값
문맥 교환
- 프로세스가 실행되다가 인터럽트 등에 의하여 CPU를 다른 프로세스에게 넘겨주는 과정
- 프로세스 A-> 프로세스 B로 바뀜, 문백 교환 발생
- CPU가 가지고 있는 PCB 정보가 바뀌게 된다. 그래서 문맥교환이 자주 일어나면 CPU의 부하가 크다.
프로세스의 개념
- 여러 개의 프로세스를 실행할 수 있는 것은 좋지만 부하가 크다->멀티 쓰레드(Thread)라는 개념 등장
- Thread
- 프로세스 안에서의 실행 흐름 단위
- 전통적인 프로세스는 한 개의 쓰레드로 구성(싱글 쓰레드)
- 프로세스는 여러 개의 쓰레드로 구성될 수 있음(멀티 쓰레드)
- 쓰레드는 프로세스 안에서 같은 자원을 공유할 수 있음
- 아까 보았던 프로세스의 구조에서 스택 영역을 제외한 나머지 영역은 쓰레드들끼리 서로 공유 가능
- 스택 영역은 각자의 쓰레드가 독립적으로 유지
멀티쓰레드의 장점
- 문맥교환이 적게 일어나므로 메모리의 부하가 줄어든다.
- 쓰레드는 프로세스 내의 스택 영역을 제외한 모든 자원을 공유하기 때문에 쉽게 공유할 수 있다.
프로세스들은 독립적이기 때문에 프로세스들끼리 데이터를 공유하는 것이 어려움 - 반응성 증가
멀티쓰레드의 단점
같은 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.(데드락, 교착 상태)
데드락(교착 상태)
두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리면서 결과적으로 아무것도 완료되지 못하는 상태
스케줄링
- 다중 프로그래밍 상황에서 CPU 이용률을 최대하하기 위해 항상 프로세스를 실행 중에 있게 하는 것
CPU는 일반적으로 시스템 내에 하나밖에 없으므로 여러 프로그램이 동시에 실행되는 시분할 환경에서 최대한 효율적으로 관리되어야 한다. - 전문적으로 어떤 프로세스를 CPU에게 할당할지를 결정하는 개념이 필요하게 되어 등장한 것이 스케줄러
스케줄러
- 스케줄러는 준비 상태에 있는 프로세스등 중에 하나를 선택하여 CPU를 할당한다.
- 준비 상태에 있는 스케줄러들은 Ready Queue라는 구조 안에 저장된다.
- FIFO 방식의 큐가 아니어도 된다. 우선순위 큐, 트리 등
- 준비 상태에 있는 스케줄러들은 Ready Queue라는 구조 안에 저장된다.
- 스케줄러 방식에는 비선점형 방식과 선점형 방식이 존재
- 비선점형 방식 : CPU를 획득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 빼앗기지 않는 방식
- 선점형 방식 : 다른 프로세스가 원하면 CPU를 강제로 빼앗아서 사용할 수 있는 방식
대신 문맥 교환이 발생하므로 오버헤드 증가
스케줄링 방법 종류
FCFS, First Come First Served(선입 선처리 방식)
- 비선점형 스케줄링
- CPU 할당을 먼저 요청한 프로세스가 먼저 할당을 받는 방식(순서대로)
- 큐를 이용해서 간단히 구현
SJF, Shortest Job First
- 작업 시간이 제일 짧은 것부터 처리하는 방식
- 선점형, 비선점형 둘 다 가능
- 작업 시간이 오래 걸리는 프로세스를 처리하고 있는데, 작업시간이 잛은 프로세스가 왔다.
- CPU를 넘겨준다 : 선점형
- CPU를 넘겨주지 않는다 : 비선점형
- 작업 시간이 오래 걸리는 프로세스를 처리하고 있는데, 작업시간이 잛은 프로세스가 왔다.
- 처음에는 실행시간이 16만큼 걸리는 P1만 있다고 가정
- 바로 뒤에 실행시간이 4인 P2가 온다 -> P1은 CPU를 P2에게 넘겨준다.
- 그 뒤에 실행시간이 4인 P3이 온다 -> 다음 차례는 P3
- 그 뒤로도 P1보다 실행시간이 짧은 프로세스만 온다면? P1은 영원히 작업을 처리하지 못하게 될 것이다.
이 상황을 기아 상태라고 한다.
기아 상태
처리 시간이 긴 프로세스는 무한정 기다리는 상태로 남게 된다.
에이징 기법
- 프로세스가 기다린 만큼 우선순위를 부여함
- 전에 오래 기다린 적이 있는 프로세스는 우선순위가 높아지므로 처리시간이 길더라도 우선적으로 처리될 수 있음
Priority(우선순위 스케줄링)
- 각 프로세스마다 특정한 기준에 따른 우선순위 부여
- 만약 우선순위가 같다면 FCF5 방법을 이용하여 먼저 도착한 프로세스부터 처리할 수 있음
SJF도 일종의 우선순위 스케줄링 방법
- 우선 순위 부여 기준->작업 시간
- 기아 문제 발생, 에이징 기법으로 해결 가능
Round Robbin(RR, 라운드 로빈)
- 일정 시간(Time Slice)를 정하여 각각의 프로세스가 이 정해진 시간동안 CPU를 정유하도록 하는 방식
- 문맥교환이 일정 시간마다 계속 일어나므로 선점형 방식
- Time Slice를 너무 작게 설정하면 문백교환이 많아 일어나므로 오버헤드 증가
- 인터랙티브한(대화형) 운영체제에 유용
Multi Level Queue(멀티 레벨 큐)
- 큐를 여러 개 사용해서 각 큐에 특정한 기준에 따른 우선순위 부여
- 각 큐는 자신의 스케줄링 알고리즘을 가지고 있도록 함
- 각 큐 사이에 절대적인 우선순위 존재
'네트워크&클라우드' 카테고리의 다른 글
서버관리 (0) | 2023.06.01 |
---|---|
데이터베이스MySQL (0) | 2023.05.31 |
네크워크 (0) | 2023.05.30 |