일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 동적 프로그래밍(Dynamic Programming)
- 백준 2504번
- BFS
- 백준 10000번
- 백준 17608번
- 스택(Stack)
- 위상 정렬(Topology Sort)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 18352번
- 백준 2812번
- DFS(Depth First Search)
- BFS(Breadth First Search)
- DFS & BFS
- 위상 정렬(Topological Sort)
- 백준 2493번
- 이분 탐색(Binary Search)
- 백준 2261번
- 트리(Tree)
- 백준 21606번
- 분할 정복(Divide and Conquer)
- 백준 1707번
- 큐(Queue)
- 백준 1948번
- DFS
- 이분 그래프(Bipartite Graph)
- 그리디 알고리즘(Greedy Algorithm)
- 그래프(Graph)
- 백준 9012번
- 알고리즘 개념
- Today
- Total
Always Be Wise
Project_1 : Threads - Weekly I Learned 본문
운영체제는 프로그램을 쉽게 실행하고(동시에 여러 프로그램을 실행시킬 수도 있고),
프로그램 간의 메모리 공유를 가능케하고, 여러 입출력 장치와 상호작용을 가능케하는 소프트웨어이다.
다시 말해, 프로세서, 메모리, 또는 디스크와 같은 물리적인 자원을 가상 형태의 자원으로 생성하여
다양한 프로그램들이 자원을효율적이고 공정하게 사용할 수 있도록 관리하는 역할을 담당하는 것이다.
이번 주에 집중하여 학습한 것은 운영체제의 프로세서 가상화와 관련한 것이었다.
하드웨어의 도움을 받아 운영체제는 시스템에 매우 많은 수의 프로세서가 존재하는 듯한 환상을 만들어낸다.
하나 혹은 소수의 프로세서로 동시에 많은 프로그램을 실행하는 것처럼 보이는 이러한 환상은
운영체제가 프로그램을 실행하고, 중단하고, 다시 실행하는 작업을 반복하면서 만들어내는 것이다.
시분할이라고 불리는 이러한 기법은 프로세서의 시간을 나누어씀으로서 가상화를 구현한 것이라 할 수 있다.
그런데 운영체제는어떻게 프로그램을 중단하고 실행시킬 수 있는 것일까? 어떤 기준으로 프로그램을 중단하고 실행하는 것일까?
1) 어떻게 프로그램을 중단하고 실행시킬 수 있는 것일까?
사실 프로그램을 실행하는 것 자체는 어렵지 않은 문제이다.
다만, 프로그램이 실행 중이라는 것은 운영체제는 실행 중이지 않다는 것을 의미한다.
그렇다면 어떻게 프로그램을 중단, 전환할 수 있을까? 다시 말해 운영체제는 어떻게 제어권을 획득할 수 있는 것일까?
운영체제는 프로그램의 시스템콜과 하드웨어의 인터럽트를 통해 프로세서 제어권을 갖게 된다.
Alarm Clock 구현은 인터럽트, 정확히는 타이머 인터럽트에 대한 이해를 높이는데 많은 도움이 되었다.
2) 어떤 기준으로 프로그램을 중단하고 실행하는 것일까?
운영체제가 제어권을 획득하면 중요한 결정을 내려야 한다.
현재 실행 중인 프로그램을 계속 실행할 것인지, 아니면 전환할 것인지를 결정해야 한다.
이러한 결정을 위해 운영체제는 스케줄러를 이용한다.
Priority Scheduling 구현은 스케줄러를 이용하는 정책(스케줄링)에 대해 고민해볼 수 있는 기회를 주었다.
이외에도 프로세스와 스레드, 문맥교환 등 프로세서 가상화와 관련한 중요 개념들을 익히고,
해당 개념들이 실제 코드적으로 어떻게 구현이 되는지를 확인해 볼 수 있었다.
이번 한 주의 구체적인 노력은 아래 링크에 담아보았다.
2021.12.26 - [프로젝트/Pintos] - Project_1 : Threads - Introduction
2021.12.26 - [프로젝트/Pintos] - Project_1 : Threads - Alarm Clock
2021.12.26 - [프로젝트/Pintos] - Project_1 : Threads - Priority Scheduling(1)
2021.12.28 - [프로젝트/Pintos] - Project_1 : Threads - Priority Scheduling(2)
2021.12.28 - [프로젝트/Pintos] - Project_1 : Threads - Priority Scheduling(3)
2021.12.29 - [프로젝트/Pintos] - Project_1 : Threads - Priority Scheduling(4)
'카이스트 정글 - 프로젝트 > Pintos' 카테고리의 다른 글
Project_2 : User Programs - Argument Passing (0) | 2021.12.30 |
---|---|
Project_2 : User Programs - Introduction (0) | 2021.12.30 |
Project_1 : Threads - Priority Scheduling(4) (0) | 2021.12.29 |
Project_1 : Threads - Priority Scheduling(3) (0) | 2021.12.28 |
Project_1 : Threads - Priority Scheduling(2) (0) | 2021.12.28 |