혼자 공부하는 컴퓨터구조 + 운영체제 연습문제
# 1. 운영체제를 알아야 하는 이유
* 운영체제는 실행할 프로그램에 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 프로그램
* 운영체제에 대한 설명
- 운영체제를 이해하면 하드웨어와 프로그램을 더 깊이 이해
- 운영체제는 메모리 내 커널 영역에 적재
- 운영체제는 시스템 자원을 관리하는 프로그램
- 운영체제는 사용자가 실행하는 프로그램이 올바르게 실행되도록 도움
# 2. 운영체제의 큰 그림
* 커널은 운영체제의 핵심 기능을 담당하는 부분을 의미
* 이중모드와 시스템 호출
- 운영체제의 핵심 서비스는 커널 모드로 실행
- 일반적인 응용 프로그램은 사용자 모드로 실행
- 시스템 호출을 통해 사용자 모드에서 커널 모드로 전환 -> 운영체제 서비스 제공받기 위해
- 시스템 호출은 일종의 인터럽트. 소프트웨어적인 인터럽트 -> 입출력장치에 의해 발생 / 특정 명령어에 의해 발생
* 운영체제의 핵심 서비스
- 프로세스 관리
- 자원 접근 및 할당
- 파일 시스템 관리
# 3. 프로세스와 스레드
* CPU를 정해진 시간 만큼만 사용하고 시간이 끝났음을 알리는 타이머 인터럽트 (하드웨어 인터럽트) 발생
* PCB 프로세스 제어 블록 - OS는 PCB를 통해 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고 프로세스에 자원을 배분
* 프로세스
- 프로세스 : 실행되는 프로그램
- 프로세스가 생성되면 커널 영역에 PCB가 생성됨
- 프로세스들은 문맥 교환을 통해 번갈아 가면서 수행
- 프로세스는 반드시 사용자와 상호작용할 수 있어야 하는 것은 아님 -> 사용자 상호작용 없이도 백그라운드에서 시스템 리소스 사용 및 실행 가능.
* 문맥 교환
- 빠르게 자주 수행되는 것이 좋은 것만은 아님 -> 오버헤드 우려
- 직전에 수행되던 프로세스의 문맥이 백업되고 다음에 수행할 프로세스의 문맥이 복구됨
- 문맥은 PBC 에 기록됨
# 4. 프로세스 상태와 계층 구조
* 프로세스 상태
- 생성상태 -> 준비상태 -> (디스패치) -> 실행상태 -> 종료상태
- 실행상태 -> (타이머 인터럽트) -> 준비상태
- 실행상태 -> (입출력 요청) -> 대기상태 -> (입출력 완료) -> 준비상태
* fork() exec()
- fork 시스템 호출을 하면 새로운 폴더가 아닌 프로세스를 생성
- fork 시스템 호출을 하면 부모 프로세스의 복제본이 자식 프로세스로서 생성
- exec 시스템 호출을 하면 프로세스의 메모리 공간이 다른 프로세스의 내용으로 변경 (덮어쓰기)
- 많은 운영체제는 fork exec를 통해 프로세스 계층 구조 형성
* 프로세스 상태
- 생성 상태는 프로세스를 생성중인 상태
- 준비 상태는 CPU를 할당받아 실행할 수 있으나 본인 차례를 기다리다가 할당 받고 실행할 준비
- 실행 상태는 프로세스 실행중
- 종료 상태는 프로세스 종료중
# 5. 스레드
* 스레드
- 프로세스 내의 실행의 흐름 단위
- 프로세스 내의 스레드들은 각기 다른 코드/데이터/힙 영역을 가지고 있지 않음
- 프로세스 내의 스레드들은 각기 다른 프로그램 카운터 값을 가지고 있음
- 프로세스 내의 스레드들은 각기 다른 스택을 가지고 있음 -> 스레드 id, pc 값, 레지스터 값, 스택을 각각 가지고 있음
-> 코드와 데이터, 파일, 힙은 스레드가 공유하는 자원
-> 레지스터, 스택, 프로그램 카운터는 스레드가 공유하지 않는 자원
* 멀티프로세스와 멀티스레드의 차이
- 프로세스끼리는 기본적으로 자원을 공유하지 않지만 프로세스 내의 스레드끼리는 같은 프로세스 내의 자원을 공유함
# 6. CPU 스케쥴링
* 프로세스 스케쥴링
- 운영체제는 우선순위를 토대로 프로세스 스케쥴링
- 스케쥴링 큐를 사용해 스케쥴링할 프로세스 관리
- 준비 큐에는 준비 상태인 프로세스들이 , 대기 큐에는 대기 상태인 프로세스들이 삽입
- 선점형 스케쥴링은 프로세스가 이용 중인 자원을 강제로 뺏을 수 있는 방식
* 선점형 스케쥴링과 비선점형 스케쥴링
- 선점형 스케쥴링은 어느 한 프로세스가 자원을 독점할 수 없는 스케쥴링 방식
- 선점형 스케쥴링은 문맥 교환 과정의 오버헤드가 비선점형 스케쥴링에 비해 많음
- 비선점형 스케쥴링은 어느 한 프로세스가 자원을 독점할 수 있는 스케쥴링 방식
- 비선점형 스케쥴링은 문맥 교환 과정의 오버헤드가 선점형 스케쥴링에 비해 적음
# 7. CPU 스케쥴링 알고리즘
* 준비 큐에 A, B, C, D 순으로 프로세스를 삽입한다면 선입 선처리 스케쥴링 알고리즘을 적용하면 A-B-C-D 순서대로 CPU 할당 받음
* 우선순위가 낮아 실행이 계속 연기되는 문제 - 기아문제
* 기아문제 해결을 위해 점차 우선순위를 높이는 기법 - 에이징
# 8. 동기화
* 실행 순서를 위한 동기화 - 프로세스를 올바른 순서대로 실행하기
* 상호 배제를 위한 동기화 - 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하도록 하기
* 임계 구역
- 임계 구역에서는 반드시 하나의 프로세스만 실행되도록 해야함
- 여러 프로세스가 동시에 실행될 경우 레이스 컨디션 발생
- 임계 구역에서 실행되는 프로세스가 있다면 다른 프로세스는 기다려야함 -> 무한정 대기는 아님. 유한대기
- 운영체제는 임계 구역을 관리
# 9. 동기화 기법
* 뮤텍스 락과 세마포
- 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호배제를 위한 동기화를 이룸
- 세마포는 공유 자원이 여러 개 있는 상황에서도 이용 가능
- 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있음
- 세마포를 이용하면 반드시 바쁜 대기를 할 필요는 없음
* 조건변수 x, y가 있다고 가정할 때 스레드 a는 실행과정에서 x.wait 호출, 스레드 b는 y.wait 호출함. 스레드 c가 y.signal 을 호출하면 스레드 a와 b 중 실행이 재개되는 스레드는 b 이다
-> y.wait 에서 블록이 해제되어 y 조건 변수의 대기 큐에서 먼저 대기 중이던 스레드가 재개됨
여전히 x.wait를 호출한 a 는 블록된 상태이므로 재개되지 않음
* 세마포를 이용하면 동시에 실행되는 프로세스 혹은 스레드 간에 실행 순서 제어를 위한 동기화(특정 조건이 만족되어야만 실행할 수 있는 상황에서 올바른 순서대로 실행하게 하는 것)와 상호 배제를 위한 동기화(동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 제어하는 것)를 할 수 있음
'[ Computer Science ] > Computer Network' 카테고리의 다른 글
[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 5장 (0) | 2024.04.29 |
---|---|
[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 3-4장 (0) | 2024.04.29 |
[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 1-2장 (0) | 2024.04.29 |
[컴퓨터네트워크] 네트워크 개론 1장 (0) | 2024.04.29 |
[컴퓨터 네트워크] 네트워크 개론 연습문제 1~7장 (3) | 2023.10.30 |
[컴퓨터 네트워크] 데이터통신과 네트워크의 이해 (0) | 2023.10.30 |
[컴퓨터 네트워크] 모두의 네트워크 연습문제 1장~9장 (1) | 2023.10.30 |