일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- System
- HTML
- function
- 투자
- CSS
- C
- java
- beans
- algorithm
- CLASS
- OOP
- Call-by-reference
- query
- Kafka
- UTF-8
- 윈도우즈
- windows
- Sort
- API
- JavaScript
- meta
- WebProgramming
- c++
- 노드
- 악성코드
- request
- 자료구조
- jsp
- array
- 포인터
Archives
- Today
- Total
hahahia
프로세스와 스케줄링 및 컨텍스트 스위칭 본문
프로세스란?
- 실행 중에 있는 프로그램을 의미함.(메인 메모리로 이동하여)
프로세스를 구성하는 요소
- 메모리 구조 + Register Set
프로세스의 스케줄링(Scheduling)
- 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일
- 이 때 사용되는 알고리즘을 스케줄링 알고리즘(Scheduling Algorithms)이라 한다.
스케쥴러
- 스케줄링 알고리즘을 적용해 실제로 프로세스를 관리하는 운영체제 요소(모듈)
프로세스의 상태 변화
- 멀티 프로세스 운영체제에서는 프로세스 하나가 계속해서 실행되는 것이 아니고, 여러 개의 프로세스들이 돌아가면서 실행되기 때문에, 프로세스 각각의 상태는 시간 흐름에 따라 변화한다.
1. S(Start) -> Ready 상태로의 전이
- 프로세스가 생성이 되면 스케줄러에 의해 선택되기를 바라며 Ready상태가 되어 실행을 기다리며 존재한다.
2. Ready -> Running 상태로의 전이
- 스케줄러는 Ready 상태에 있는 프로세스 중 하나를 선택해 CPU에 의해 실행되게 함(스케줄링 알고리즘 기반)
- 스케줄러에 의해 선택된 프로세스는 Running 상태가 되어 실행되는 것이다.
3. Running -> Ready 상태로의 전이
- 일의 중요정도에 따라 우선순위가 매겨진다.
- 예를 들어 높은 우선순위의 프로세스가 생성되었고 Ready 상태가 되었다. 그리고 낮은 우선순위의 Running상태의 프로세스는 Ready 상태로 내리고 높은 순위의 프로세스가 Running 상태로 변한다
4. Running -> Blocked 상태로의 전이
- 데이터 입, 출력에 관련된 일을 하는 경우 발생.
- 데이터 입, 출력시 CPU에 의해서 프로세스가 실행될수 없다.
- 따라서 데이터 입, 출력을 진행중인 프로세스를 잠시 내려오게 하고(Blocked) Ready 상태의 프로세스 중 하나를 실행시킴(CPU를 효율적으로 사용)
5. Blocked -> Ready 상태로의 전이
- Blocked 상태는 스케줄러에 의해 선택될 수 없다.
- 따라서 다시 Running 하기 위해서는 Ready 상태를 거쳐야만 한다.
- ex) 입, 출력이 완료된 프로세스
6. Blocked -> Exit
- 프로세스 종료
컨텍스트 스위칭(Context Switching)
- CPU 내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워진다.
- 스케줄러에 의해 실행된 프로세스가 변경될 시 CPU 내에 존재하는 레지스터들은 컨텍스트 스위칭에 의해 데이터를 변경한다.
- 실행되는 프로세스의 변경과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다. 따라서 멀티 프로세스 기반의 프로그램 실행은 많은 부분 성능 향상에 도움을 줄 수도 있지만 컨텍스트 스위칭이 미치는 영향을 고려할 경우 오히려 성능 저하를 가져올 수 있다.
참고 윈도우즈 시스템 프로그래밍 | 윤성우 저 | 한빛미디어
'Windows Programming > Windows::System' 카테고리의 다른 글
시스템 디렉터리와 Windows 디렉터리 예제 소스 (0) | 2012.03.06 |
---|---|
프로세스의 생성(CreateProcess 함수 및 STARTUPINFO 구조체) (0) | 2012.03.06 |
명령 프롬프트(cmd) 만들기 (3) | 2012.03.02 |
오류의 확인(GetLastError 함수) (0) | 2012.03.02 |
64bit 기반 프로그래밍 (0) | 2012.03.02 |
Comments