운영체제(OS, Operating System)
: 컴퓨터 시스템의 핵심 소프트웨어로, 사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어
- Windows, Linux, Mac OSX 등이 있음
- 컴퓨터의 성능을 높이고 사용자에게 편의선을 제공을 목적으로 하는 컴퓨터 하드웨어를 관리하는 프로그램
운영체제의 역할
1. CPU 스케줄링 & 프로세스 관리
- CPU 소유권을 어떤 프로세스에 할당할지
- 프로세스의 생성과 삭제
- 자원 할당 및 반환을 관리
2. 메모리 관리
- 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지를 관리
3. 디스크 파일 관리
- 디스크 파일을 어떠한 방법으로 보관할지를 관리
-> 파일 생성, 수정, 제거, 공유, 백업, 복구, 주기억장치와 보조기억장치 간의 파일 전송 등
4. I/O 디바이스 관리
- I/O 디바이스들인 마우스, 키보드와 컴퓨터 간에 데이터를 주고 받는 것을 관리
cf) CPU 스케줄링 알고리즘
1. 선입 선처리 스케줄링 (FCFS)
- CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당 받음
- 선입선출 Queue로 쉽게 관리 가능
1) 비선점형 스케줄링
- 일단 CPU가 한 프로세스에 할당되면, 그 프로세스가 종료 또는 I/O 처리를 위해 CPU를 방출할 때까지 CPU를 점유
2) 호위 효과
: 다른 프로세스들이 하나의 긴 프로세스가 CPU를 놓기를 기다리는 것
- 선입 선처리 스케줄링에서는 호위 효과가 발생
- 결론적으로 낮은 CPU와 장치 사용률을 보임
3) 문제
- 한 프로세스가 지나치게 오랫동안 CPU를 점유하는 것이 허용되기 때문에 큰 손해가 발생
2. 최단 작업 우선 스케줄링 (SJF)
- 각 프로세스의 next CPU burst 길이를 고려한 알고리즘
- CPU가 이용 가능해지면, 가장 작은 next CPU burst를 가진 프로세스에 CPU를 할당
- 두 프로세스가 동일한 길이의 next CPU burst를 가지면, 선입 선처리 스케줄링을 적용
1) 최적의 알고리즘
- SJF 스케줄링 알고리즘은 주어진 프로세스 집합에 대해 최소의 평균 대기 시간을 가짐
2) 문제
- 실행하기 전 next CPU burst의 길이를 완벽하게 예측하기 어려움
3) next CPU burst 예측
- 한계를 극복하고자 next CPU burst를 예측
- next CPU burst 길이의 근삿값을 계산
- 지수 평균한 것으로 근삿값을 계산
4) 최소 잔여 시간 우선 (STCF)
- 선점형 SJF
- 만약 새로운 프로세스가 현재 실행되고 있는 프로세스의 남은 시간보다도 더 짧은 CPU burst를 가지고 있다면 Context Switching이 발생
3. 라운드 로빈 스케줄링 (RR)
- 시간 할당량(time quantum) 또는 타임 슬라이스(time sclice)라고 하는 작은 단위의 시간을 정의
- CPU 스케줄러는 준비 큐를 돌면서 한 프로세스에 한 번의 시간 할달량 동안 CPU를 할당
1) 실행 두 가지 경우
- 첫 번째, 프로세스의 CPU burst가 한 번의 시간 할당량보다 작은 경우
- 프로세스 자신이 cpu를 자발적으로 방출할 것
- 스케줄러는 그 후 준비 큐에 있는 다음 프로세스를 진행
- 두 번째, 현재 실행 중인 프로세스의 CPU burst가 한 번의 시간 할당량보다 긴 경우
- 시간 할당량 이후에 interrupt발생
- Context Switching이 일어나고 실행하던 프로세스는 다시 준비 큐에 넣어짐
- 그 후, 스케줄러는 준비 큐의 다음 프로세스를 선택
2) 선점형
- CPU burst가 한 번의 시간 할당량을 초과하면, 프로세스는 선점되고 준비 큐로 되돌아감 -> 그러므로 선점형
3) RR 알고리즘 성능
- 시간 할당량의 크기에 매우 많은 영향을 받음
- 시간 할당량이 매우 크면, RR 알고리즘의 경우 선입 선처리 정책(FCFS)과 비슷해짐
- 한 프로세스가 지나치게 오랫동안 CPU를 점유하게 됨
- 시간 할당량이 매우 적다면 RR 알고리즘은 매우 많은 Context Switching을 야기함
4) 시간 할당량(Time Quantum)과 문맥 교환 시간(Context Switch Time)
- 시간 할당량은 Context Switch Time보다 커야 함 -> 그렇지 않으면 문맥 교환 오버헤드로 인해 성능이 크게 저하
- 만약 Context Switch Time이 시간 할당량의 10%라면, CPU 시간의 약 10%가 Context Switch에 소비되는 것
- 현대 운영체제의 시간 할당량은 10 ~ 100ms -> Context Switch 시간은 10ms
5) 총 처리 시간(turnaround time)
- 총 처리 시간 또한 시간 할당량의 크기에 좌우됨
- 한 프로세스 집합의 평균 총 처리 시간은 시간 할당량의 크기가 증가하더라도 반드시 개선되는 건 아님
4. 우선순위 스케줄링(Priority Scheduling)
- CPU는 가장 높은 우선순위를 가진 프로세스에 할당
- 우선순위가 같은 프로세스들은 선입 선처리(FCFS) 순서로 스케줄됨
- SJF은 일반적인 우선순위 스케줄링 알고리즘의 특별한 경우임 -> 짧은 실행시간을 우선순위로 가진 경우
1) 선점형과 비선점형
- 선점형은 새로 도착한 프로세스의 우선순위가 현재 실행되는 프로세스의 우선순위보다 높다면 Context Switching이 발생
- 비선점형은 준비 완료 Queue에 새로운 프로세스를 넣음
2) 문제
- 기아 상태(Starvation) 또는 무한 봉쇄(Indefinite Blocking)
- 우선순위 스케줄링 알고리즘을 사용할 경우 낮은 우선순위 프로세스들이 CPU를 무한히 대기하는 경우가 발생
3) 해결
- 노화(Aging)
- 오랫동안 시스템에서 대기하는 프로세스들의 우선순위를 점진적으로 증가시킴
4) 우선순위 + 라운드 로빈 알고리즘(Priority with RR Scheduling)
- 우선순위가 가장 높은 프로세스를 실행하고 우선순위가 같은 프로세스들은 라운드 로빈 스케줄링을 사용하여 스케줄하는 방식
5. 다단계 큐 스케줄링(Multilevel Queue Scheduling)
- 우선순위마다 별도의 Queue를 가짐
- 우선순위가 가장 높은 큐에서 프로세스를 스케줄함
- 프로세스들이 시스템 진입 시에 영구적으로 하나의 큐에 할당
- 이 때문에 기아(starvation) 상태가 발생할 수 있음
- 준비 큐를 foreground와 background 큐로 나눌 수 있음
- foreground(interactive)
- background(batch)
- EX) 백그라운드 큐는 FCFS 알고리즘에 의해 스케줄 되는 반면, 포그라운드 큐는 RR 알고리즘에 의해 스케줄 될 수 있음
EXAMPLE
- 4개의 큐를 가진 다단계 큐 스케줄링 알고리즘
- 각 큐는 낮은 우선순위의 큐보다 절대적인 우선순위를 가짐
- 예를 들어, 배치 프로세스가 실행되고 있는데, 대화형 프로세스가 준비 큐에 들어가면 배치 프로세스는 선점될 것임
- Foreground, Background 큐는 CPU 시간의 일정량을 받아서 자기 큐에 있는 다양한 프로세스들을 스케줄함
- 예를 들어, 포그라운드 큐는 RR 스케줄링을 위해 CPU 시간의 80%가 주어지고, 백그라운드 큐는 CPU 시간의 20%를 받아서 사용함
6. 다단계 피드백 큐 스케줄링(Multilevel Feedback Queue Scheduling)
- 프로세스가 큐들 사이를 이동하는 것을 허용
1) 다단계 피드백 큐 스케줄링의 동작
- 새로운 프로세스는 모두 첫 번째 큐에 들어감 -> 그 후, 라운드 로빈(RR)알고리즘으로 동작
- 시간 할당량(time quantum) 안에 끝내지 못하면 낮은 우선순위 큐로 넘어감
- 낮은 우선순위 큐는 FCFS 알고리즘으로 동작하게 되는데 이때, 너무 오래 대기하는 프로세스는 높은 우선순위 큐로 이동할 수 있음 -> 노화(Aging)를 이용해서 기아(starvation) 상태를 예방
2)매개변수
- 큐의 개수
- 각 큐를 위한 스케줄링 알고리즘
- 한 프로세스를 높은 우선순위 큐로 올려주는 시기를 결정하는 방법
- 한 프로세스를 낮은 우선순위 큐로 강등시키는 시기를 결정하는 방법
- 프로세스가 서비스를 필요로 할 떄 프로세스가 큐를 결정하는 방법
운영체제 구조
- 보라색 부분이 운영체제
- GUI가 없고 CUI만 있는 리눅스 버전도 있음
시스템 콜
- 운영체제가 커널에 접근하기 위한 인터페이스
- 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용
- 유저 프로그램이 I/O 요청으로 트랩을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행됨
- 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있음 -> 프로그램을 다른 프로그램으로 부터 보호할 수 있음
- 시스템 콜은 하나의 추사화 계층이기 때문에 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경쓰지 않고 프로그램을 구현할 수 있는 장점이 있음
cf)
I/O 요청
: 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
드라이버
: 하드웨어를 제어하기 위한 소프트웨어
Modebit
- 0 또는 1의 값을 가지는 플래그 -> 유저 모드와 커널 모드를 구분하는 데 사용
- I/0 디바이스의 경우 유저 모드를 기반으로 작동할 경우 공격자의 공격 대상이 되기 쉬움
- 커널 모드를 통해 작동한다고 해도 100% 막을 수는 없지만, 운영체제를 통해 작동하게 해야 막기 수움
- 0 : 커널 모드
- 커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
- 1 : 유저 모드
- 유저 모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부러 침범하지 못하는 모드
- 커널
- 운영체제의 핵심 부분
- 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/0 디바이스, I/0 요청 관리 등 운영체제의 중추적인 역할을 함
컴퓨터의 요소
CPU
- 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 장치
- 프로그램의 명령어를 해석하고 실행하는 역할을 하는 컴퓨터 시스템의 중심이 되는 핵심 요소
제어장치
- 프로세스 조작을 지시하는 CPU의 한 부품
- I/O 장치 간 통신을 제어
- 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정
레지스터
- CPU 안에 있는 임시 기억 장치
- CPU와 직접 연결이 되어 있어 연산 속도가 메모리보다 빠름
- CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달
- SSD or HDD -> RAM(MAIN MEMORY) -> CACHE -> REGISTER(CPU)
- REGISTER에 있을 경우 HIT, 없으면 하위 부품에서 찾아옴
cf) CACHE vs BUFFER cs REGISTER
1. CACHE
- CPU와 MAIN MEMORY 사이에서 속도 차이에 따른 병목 현상을 줄이기 위한 범용 메모리
- 어떤 시스템 내에서 데이터의 집중적인 사용으로 인해 전체 시스템에 절대적인 영향을 미치는 부분의 사용 빈도가 늘어나 그 부분의 성능이 저하되어 전테 시스템이 마비되는 현상을 줄이기 위한 것
- 자주 사용하는 데이터나 값을 복사해 놓는 임시 저장소
- 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용
- 저장 공간이 작고 비용이 비싸지만 빠른 성능을 제공
- CPU에 가까울 수록 캐시는 작고 비싸고 빠름
- 프로그램에 직접적으로 읽거나 쓸 수 없음
- 메모리에 있는 데이터를 임시로 가져온 것
- 지역성
- 공간적 지역성 : CPU가 요청한 주소 지점에 인접한 데이터들이 앞으로 참조될 가능성이 높은 현상
- 시간적 지역성 : 최근 사용된 데이터, 변수가 재사용될 가능성이 높은 현상
- 순차적 지역성 : 데이터가 기억 장치에 저장된 순서 대로 인출되고 실행될 가능성이 높은 현상
- 보통 명령어는 공간적 지역성이 높고, 데이터는 시간적 지역성이 높음
- 캐시에 있는 데이터가 변경되었을 때
1) 즉시 쓰기
- : 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식
- 단점 : 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려짐
- 장점 : 메모리의 최신값이 항상 유지됨
2) 지연 쓰기
- 변경된 내용을 모아서 주기적으로 반영하는 방식
- 단점 : 메모리와 캐시된 데이터 사시의 불일치가 발생할 수도 있음
- 장점 : 메모리와의 데이터 전송 횟수가 줄어들어 시스템의 성능을 향상시킬 수 있음
2. BUFFER
- 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역 -> 사용 후에 데이터를 폐기
- 처리하는 데 필요한 리소스 크기가 큰 편
- 버퍼링 : 버퍼를 활용하는 방식 or 버퍼를 채우는 동작
CACHE vs BUFFER
- 캐시는 처리 속도를 최대한 올리기 위한 기술로 주로 빠른 속도의 장치를 보조
- 버퍼는 처리 속도가 떨어지는 걸 방지하는 기술로 주로 느린 속도의 장치를 보호
3. REGISTER
- CPU가 요청을 처리할 때 쓰는 임시 저장 공간
- 공간은 작고 가격은 비싸지만 CPU에 직접 연결되어 있어 연산 속도가 매우 빠름
산술논리연산장치 (ALU)
- 덧셈, 뺄셈 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로
- CPU의 연산 처리
- 제어장치가 메모리에서 레지스터로 계산할 값을 로드
- 제어장치가 레지스터에 있는 값을 계산 하라고 산술논리연산장치에 명령
- 제어장치가 계산된 값을 다시 레지스터에서 메모리로 계산한 값을 저장
인터럽트
- 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말함
- I/O 디바이스로 인한, 0으로 숫자를 나누는 산술 연산에서의, 프로세스 오류 등으로 인터럽트 발생
- 인터럽트가 발생되면 인터럽트 핸들러 함수가 모여있는 인터럽트 백터로 가서 인터럽트 핸들러 함수 발행
- 과정
- 기존의 작업을 처리하던 도중 인터럽트 발생
- 현재 컴퓨터가 처리하는 일을 중지하고 현재의 컴퓨터 상태를 저장
- 해당 인터럽트를 처리해주기 위한 인터럽트 서비스 루틴 처리
- 인터럽트 처리 이후 저장되었던 이전 작업의 생태를 복구하고 이전 작업 수행 재개
1) 하드웨어 인터럽트
- CPU 외부의 디스크 컨트롤러나 주변 장치로부터 요구되는 것 -> 운영체제의 처리를 요하는 상황을 알리기 위해 전기적인 신호를 사용해 구현
- 발생하는 예
- 기계 검사 인터럽트 : 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제가 발생한 경우
- 외부 인터럽트 : 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
- 입출력 인터럽트 : 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청된 경우
- 프로그램 검사 인터럽트 : 프로그램 실행 중 보호된 기억 공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의무 문제가 발생한 경우
2) 소프트웨어 인터럽트
- 외부가 아닌 CPU 내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
- 프로그램 실행 중 프로그램 상의 처리 불가능한 오류나 이벤트를 알리기 위한 경우 발생 -> 트랩(TRAP) or 예외(EXCEPTION) 이라고 부름
- 프로그램 내에서 특별한 서비스를 요구하거나 감시를 목적으로 의도적으로 프로그램이 발생시킨 특별한 명령어에 의해 발생되기도 함
- 발생하는 예
- 존재하지 않는 메모리 주소에 접근
- 나눗셈에서 0으로 나누고자 하는 경우
DMA 컨트롤러(Direct Memory Access Controller)
- I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치
- CPU에먼 너무 많은 인터럽트 요청이 들어오기 때문에 CPU 부하를 막아주면서 CPU의 일을 부담
메모리
- 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치
- RAM
타이머
- 몇 초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간을 제한함
- 시간이 많이 걸리는 프로그램이 작동할 때 제한을 걸기 위해 존재
디바이스 컨트롤러
- 컴퓨터와 연결되어 있는 I/O 디바이스들의 작은 CPU
'운영체제' 카테고리의 다른 글
추가적인 내용 (0) | 2025.01.19 |
---|---|
5. 인터럽트(Interrupt) (0) | 2025.01.16 |
4. CPU 스케줄링 알고리즘 (0) | 2025.01.16 |
3. 프로세스와 스레드 (0) | 2025.01.16 |
2. 메모리 계층 (0) | 2025.01.16 |