일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 내일배움캠프사전캠프
- 티스토리챌린지
- DB드림리더장학생
- js
- 혼공컴운
- ReactNative
- DB김준기문화재단
- 스파르타코딩클럽
- DB마이저널
- 코드잇강의추천
- 내일배움캠프
- 오늘도코드잇
- 앱개발강의
- c++헤더
- bottom tab navigation
- 환경교육봉사
- 르탄즈
- 코드잇TIL
- 알고리즘
- 혼공단
- 오블완
- 독서활동
- 코드잇앰배서더
- 르탄즈5기
- 자바스크립트
- GIT
- 혼공단JS
- 코딩공부
- 코드잇
- 앱개발부트캠프
- Today
- Total
axnuo
[OS/혼공단] 프로세스와 스레드 / CPU 스케줄링 본문
Chapter 9. 운영체제 시작하기
09-1. 운영체제를 알아야 하는 이유
운영체제란
프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
- 메모리 내 커널 영역에 적재되어 실행 됨
- 커널 영역을 제외한 영역 = 사용자 영역
- ⇒ 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 도움
운영체제를 알아야 하는 이유
운영체제는 현재 하드웨어의 상태와 코드 실행 과정, 하드웨어의 문제 등을 상세히 알려줄 수 있고 이를 통해 문제 해결의 실마리를 찾을 수 있음
09-2. 운영체제의 큰 그림
운영체제의 심장, 커널
커널 : 운영체제의 핵심 서비스를 담당하는 부분
- 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스
- 사용자 인터페이스
- 그래픽 유저 인터페이스(GUI)
- 커맨드 라인 인터페이스 (CLI)
- 사용자 인터페이스
이중 모드와 시스템 호출
이중 모드 : CPU가 명렬어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식
- 사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행모드, 커널 영역의 코드를 실행할 수 없는 모드
- 커널 모드 : 운영체제 서비스를 제공받을 수 있는 실행모드, 커널 영역의 코드를 실행할 수 있는 모드
사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 함. ⇒ 운영체제 서비스를 제공받기 위한 요청 = 시스템 호출
- 시스템 호출은 일종의 인터업트
- 인터럽트를 발생시키는 특정 명령어에 의해 발생하는 것 : 소프트웨어 인터럽트
운영체제의 핵심 서비스
- 프로세스 관리
- 메모리 안에서 굉장히 많은 프로세스가 실행 중이기 때문에 일목요연하게 관리하고 실행하는 것이 필요함
- 프로세스 : 실행 중인 프로그램
- 자원 접근 및 할당
- CPU : 프로세스들이 공정하게 CPU를 할당하기 위해 CPU 스케줄링 기법을 사용
- 메모리 : 어느 주소에 적재해야 할지를 결정해야 함
- 입출력장치 : 하드웨어 인터럽트 요청 신호를 보내면 인터럽트 서비스 루틴을 실행하여 입출력 작업 수행
파일 시스템 관리
Chapter 10. 프로세스와 스레드
10-1 프로세스 개요
- 프로세스 종류
- 포그라운드 프로세스(forground process): 사용자가 볼 수 있는 공간에서 실행되는 프로세스
- 백그라운드 프로세스(background process): 사용자가 볼 수 없는 공간에서 실행되는 프로세스데몬(demon): 유닉스 체계의 운영체제에서 백그라운드 프로세스를 부르는 명칭.서비스(service): 윈도우 운영체제에서 백그라운드 프로세스를 부르는 명칭.
- 프로세스 제어 블럭(PCB. process control block): 프로세스와 관련된 정보를 저장하는 자료 구조. 프로세스를 식별하기 위한 정보들이 포함된다.
- 프로세스 ID(PID. process ID): 프로세스를 식별하기 위해 부여하는 고유한 번호.
- 레지스터 값: 자신의 실행상태가 돌아왔을 때 이전에 사용했던 레지스터 값을 복원하는데 필요한 값.ex) 프로그램 카운터
- 프로세스 상태: 현재 프로세스의 상태를 기록.
- CPU 스케줄링 정보: 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보.
- 메모리 관리 정보: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보.ex) 페이지 테이블
- 사용한 파일과 입출력장치 목록: 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용할시 명시됨.
- 문맥 교환: 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것.문맥: 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보.문맥 교환이 매우 빠르게 이루어져 사람의 눈에는 여러 프로세스들이 동시에 실행되는 것 처럼 보임.문맥 교환이 너무 자주 일어나면 오버헤드 시간이 길어지는(혹은 메모리) 문제 발생.오버헤드(overhead): 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 혹은 메모리.
- 프로세스의 메모리 영역
- 코드 영역(code segment): 실행할 수 있는 코드(기계어로 이루어진 명령어)가 저장됨. 쓰기 금지공간. Read-only 공간.텍스트 영역(text segment)라고도 함. 정적 할당 영역.
- 데이터 영역(data segment): 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간. 전역변수 등이 저장됨. 정적 할당 영역.
- 힙 영역(heap segment): 프로그래머가 직접 할당할 수 있는 저장 공간. 동적 할당 영역.직접 할당할 시에 메모리 누수 주의!
- 스택 영역(stack segment): 데이터를 일시적으로 저장하는 공간. 지역 변수 등이 저장됨. **동적 할당 영역.**일시적으로 저장될 데이터는 스택 영역에 PUSH로 저장. 필요하지 않은 데이터는 POP으로 삭제.
10-2 프로세스 상태와 계층 구조
- 프로세스 상태
- 생성 상태(new): 프로세스를 생성 중인 상태생성 상태를 거친 프로세스는 곧바로 실행 상태가 되지 않고 준비 상태가 되어 CPU 할당을 기다림.
- 준비 상태(ready): CPU를 할당받아 실행할 수 있지만, 자신의 차례를 기다리고 있는 상태디스패치(dispatch): 준비 상태인 프로세스가 실행 상태로 전환되는 것
- 실행 상태(running): CPU를 할당받아 실행 중인 상태. 할당된 일정 시간 동안만 CPU 사용 가능.
- 대기 상태(blocked): 프로세스가 실행 도중 입출력장치를 사용하는 경우에 입출력장치의 작업을 기다리는 상태.입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다림.
- 종료 상태(terminated): 프로세스가 종료된 상태. 운영체제는 프로세스의 PCB와 메모리를 정리함.
프로세스 상태 다이어그램(process state diagram)
- 프로세스 계층 구조
- 부모 프로세스(parent process): 새 프로세스를 생성한 프로세스
- 자식 프로세스(child process): 부모 프로세스에 의해 생성된 프로세스자식 프로세스에는 부모 프로세스의 PID인 PPID(parent PID)가 기록되기도 함.
프로세스 계층 구조의 예
- 최초의 프로세스
- 유닉스 운영체제: init
- 리눅스 운영체제: systemed
- mac OS: launchd
- 프로세스 생성 기법
- fork(): 부모 프로세스가 자식 프로세스로 자신의 복사본을 생성하는 시스템 호출.
- exec(): 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출.
10-3 스레드
- 프로세스와 스레드
- 스레드(thread): 프로세스를 구성하는 실행의 단위.
- 단일 스레드 프로세스: 한 번에 하나의 스레드가 실행되는 프로세스.
- 멀티 스레드 프로세스: 한 번에 여러 스레드가 동시에 실행되는 프로세스.스레드는 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다.
- 멀티프로세스와 멀티스레드
- 멀티프로세스(multiprocess): 여러 프로세스를 동시에 실행하는 것
- 멀티스레드(multithread): 여러 스레드로 프로세스를 동시에 실행하는 것
- 멀티프로세스와 멀티스레드의 차이점: 프로세스끼리는 자원을 공유하지 않지만 스레드끼리는 같은 프로세스 내 자원을 공유함.같은 작업을 하는 동일한 프로세스 두 개→ 모든 자원이 복제되어 메모리에 저장. 즉 PID, 메모리 주소를 제외한 모든 것이 동일한 프로세스가 메모리에 저장되어있는 상태 => 메모리 낭비!같은 작업을 하는 동일한 스레드 두 개→ 프로세스가 가지고 있는 자원 공유. 여러 프로세스를 병행하는 것 보다 메모리를 효율적으로 사용 가능.=> BUT, 하나의 스레드에 문제가 생기면 프로세스 전체에 문제 발생!
- 프로세스 간 통신(IPC. inter-process communication)
: 프로세스는 기본적으로 자원을 공유하지 않지만 프로세스 간의 자원을 공유하고 데이터를 주고 받도록 하는 것.
Chapter 11. CPU 스케줄링
11-1. CPU 스케줄링 개요
- 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것
- 컴퓨터 선응과도 직결
프로세스 우선 순위
- 우선 순위가 높은 프로세스 순서대로 이용
- 우선 순위가 높은 프로세스들 : 대표적으로 입출력 작업이 많은 프레세스
- 입출력 집중 프로세스 : 비디오 재생이나 디스크 백업 작업 같이 입출력 작업이 많은 프로세스
- CPU 집중 프로세스 : 복잡한 수학 연산, 컴파일, 그래픽 처리 작업 같이 CPU 작업이 많은 프로세스
- CPU 집중 프로세스와 입출력 집중 프로세스가 동시에 CPU 자원을 요구했다고 가정하면, 입출력 집중 프로세스를 가능한 빨리 실행시켜 입출력 장치를 끊임없이 작동시키고, 그 다음 CPU 집중 프로세스에 집중적으로 CPU를 할당하는게 더 효율적
- 운영체제는 각 프로세스의 PCB에 우선순위를 명시
- => 각각의 상황에 맞게 CPU를 배분하는것이 중요
스케줄링 큐
- 프로세스들에 '줄을 서서 기다릴 것'을 요구
- 준비 큐 : CPU를 이용하고 싶은 프로세스
- 대기 큐 : 입출력장치를 이요하기 위해 대기 상태에 접어든 프로세스
- 입출력이 완료되어 완료 인터럽트가 발생하면,1. 대기 큐에서 작업을 끝낸 PCB를 준비상태로 변경
- 대기 큐에서 제거
- 준비 큐로 이동
선점형과 비선점형 스케줄링
CPU를 사용 중인 프로세스로 부터 CPU 자원을 빼앗아 다른 프로세스에 할당하거나, CPU를 사용 중인 프로세스의 작업이 끝날 때까지 다른 급한 프로세스를 기다리게 하는걸 선점형 스케줄링과 비선점형 스케줄링 이라고 함.
- 선점형 : 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 포로세스에 할당장점 : 자원 독점을 막고, 프로세스들에 골구루 자원을 배분
- 단점 : 문맥 교환 과정에서 오버헤드 발생 가능성이 높음
- 비선점형 : 어떤 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까지 다른 프로세스가 끼어들수 없음장점 : 오버헤드 발생 가능성은 선점형보다 적음
- 단점 : 당장 자원을 사용해야 하는 상황에서도 무작정 기다려야함.
11-2. CPU 스케줄링 알고리즘
- CPU 스케줄링 알고리즘는 매우 다양하고 운영체제마다 다른 알고리즘 사용.
스케줄링 알고리즘의 종류
- 선입 선처리 스케줄링(FCFS : First Come First Served Scheduling)
- 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식
- CPU를 먼저 요청한 프로세스부터 CPU를 할당
- 떄떄로 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 점에서 부작용이 존재(호위 효과)
- 최단 작업 우선 스케줄링(SJF : Shortest Job First Scheduling)
- 호위 효과를 방지하기 위한 방식
- CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행
- 기본적으로 비선점형으로 분류되지만, 선점형으로도 구현가능
- 라운드 로빈 스케줄링(Round Robin Scheduling)
- 선입 선처리 스케줄링에 타임 슬라이스라는 개념이 더해진 방식
- 타임 슬라이스는 CPU를 사용할 수 있는 정해진 시간을 의미
- 선점형 스케줄링
- 큐에 삽입된 프로세스들은 삽인된 순서대로 CPU를 이요하되 정해진 시간만큼만 CPU를 이요하고, 정해진 시간을 모두 사용하였음에도 아직 프로세스가 완료되지 않았다면 다시 큐의 맨 뒤에 삽입됨=> 문맥 교환 발생
- 타임 슬라이스 크기가 매우 중요!!!
- 최소 잔여 시간 우선 스케줄링(SRT : Shortest Remaining Time)
- 선점형 스케줄링
- 정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로ㅔㅅ스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택
- 우선 순위 스케줄링(Priority Scheduling)
- 가장 높은 우선순위를 가진 프로세스부터 실행우선순위가 높은 프로세스만 계속 먼지 실행되다보니 우선 순위가 낮은 프로세스의 실행은 계속 밀릴 수 있음 => 기아 현상* 기아 현상을 방지하기 위해 에이징이라는 기법이 존재오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식
- 다단계 큐 스케줄링
- 우선순위 스케줄링의 발전된 형태
- 준비 큐를 여러개 사용하여, 유형별로 우선순위를 구분하여 실행
- 다단게 피드백 큐 스케줄링
- 다단계 큐 스케줄링의 발전된 형태
- 다단계 큐에서는 프로세스들이 큐 사이를 이동할 수 없어서, 우선 순위가 낮은 프로세스는 계속 연기될 여지가 존재 => 기아 현상
- 큐 사이를 프로세스들이 이동 가능
- CPU를 오래 사용해야하는 프로세스는 점차 우선순위가 낮아짐
- 낮은 우선순위 큐에서 너무 오래 기다리면 높은 우선순위 큐로 이동
기본미션
1) 생성상태 2) 준비상태 3) 실행상태 4) 종료상태 5) 대기상태
선택 미션
A -> B -> C -> D
MIPS 기반 명령어 형식과 0-주소 명령어의 차이
"0-주소 명령어"와 "1-주소 명령어"는 프로그래밍 언어나 컴퓨터 아키텍처와 관련된 용어가 아니라, 데이터 구조(Data Structures)나 알고리즘(Algorithms) 분야에서 사용되는 용어입니다. 이 용어는 메모리 주소의 사용 방식에 따라 데이터 구조나 알고리즘을 설명하는 데 사용됩니다.
반면!
MIPS 아키텍처에서 "R 타입"과 "I 타입"은 명령어의 형식을 설명하는 데 사용되며, 이러한 형식은 해당 명령어의 작동 방식을 결정합니다.
**R 타입 (Register 타입)**:
- R 타입 명령어는 레지스터를 대상으로 하는 명령어입니다. 즉, 명령어에서 작동에 필요한 데이터가 레지스터에 저장되어 있어야 합니다.
- 이러한 명령어는 보통 산술 논리 연산 (예: 덧셈, 뺄셈, 비트 단위 연산 등)과 같은 작업을 수행합니다.
- R 타입 명령어는 레지스터에 대한 연산을 수행하므로 데이터를 레지스터에서 가져와서 결과를 다시 레지스터에 저장합니다.
**I 타입 (Immediate 타입)**:
- I 타입 명령어는 즉시 값을 포함하는 명령어입니다. 이러한 명령어는 보통 메모리나 레지스터의 주소와 함께 즉시 값을 사용합니다.
- 이러한 명령어는 일반적으로 데이터 이동, 브랜치 (분기), 로드/스토어 등과 같은 작업에 사용됩니다.
- I 타입 명령어는 레지스터 또는 메모리 주소와 즉시 값 사이의 연산을 수행하고 결과를 레지스터에 저장합니다.
결론 : 아예 용어 자체가 다른 것을 의미하는 것이다
GPT의 도움을 받았습니다. ㅎㅎ
'CS > OS' 카테고리의 다른 글
TIL - xv6 master 하기 (0) | 2024.11.18 |
---|---|
[ OS ] xv6 expected specifier-qualifier-list before 'static' 에러 (0) | 2024.11.16 |
[혼공단 / OS ] 가상 메모리와 파일 시스템 (0) | 2024.02.11 |
[혼공단/OS] 프로세스 동기화와 교착상태 (0) | 2024.02.04 |