일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- copy-on-write
- bash shell 반복문
- bash shell 조건문
- fork 시스템 콜
- 섭페에서 텍스처 추출
- ps 명령어
- 섭페
- pane & desktop
- 뷰포트
- 3D 배경 그래픽
- bg 명령어
- Standard Stream
- 추가 업로딩 중
- msync
- background process
- Redirection
- 후디니
- 3Ds max 기초
- atexit()
- exec 시스템 콜
- wait 시스템 콜
- foreground process
- exit()
- substance painter
- bash shell 변수
- mmap
- 개체 외곽 하이라이트 기준선 없애는 법
- 생활코딩 복습
- Symmetry
- houdini
- Today
- Total
Researcher to Developer
프로세스 스케쥴링 관련 시스템 콜 - nice(), getpriority(), setpriority() 본문
#Priority-Based 스케쥴러 (우선 순위 기반) 종류
정적 우선 순위 스케쥴러
프로세스마다 우선 순위를 미리 지정한다.
동적 우선 순위 스케쥴러
스케쥴러가 상황에 따라 우선 순위를 동적으로 변경한다.
#nice()
우선 순위를 변경하는 시스템 콜
프로세스 중 root가 소유한 프로세스만 우선 순위를 높일 수 있다. root로 실행해야만 가능하다.
다른 프로세스는 우선 순위를 낮출 수만 있다.
스케쥴링 방식에 따라 우선 순위가 적용될 수 도 있고 안될 수 도 있다.
nice() 함수 사용의 예는 다음과 같다.
#include <unistd.h>
int nice (int inc); // inc 값에 우선순위 값을 넣어주면 해당 우선순위를 우선 실행하도록 되어있다.
#getpriority(), setpriority()
프로세스의 우선 순위 값을 얻어내거나, 프로세스 리소스에 대해 우선 순위 값을 매겨주는 시스템 콜이다.
사용 예는 다음과 같다.
#include <sys/resource.h>
int getpriority(int which, id_t who);
//현재 시스템콜을 실행하고 있는 프로세스의 우선 순위 값을 얻어내는 시스템 콜
int setpriority(int which, id_t who, int value);
//현재 프로세스 또는 프로세스 관련된 리소스에 대해서 우선 순위 값을 매겨주는 시스템 콜
id_t who
프로세스 ID를 써줌, 0 이라고 쓰면 현재 프로세스
int value
우선 순위값
which
프로세스(PRIO_PROCESS), 프로세스 그룹(PRIO_PGRP), 사용자(PRIO_USER)별로
우선순위를 가져올 수 있다.
다음 예제로 확인해보자
priority.c (root 소유로 실행) 파일을 만드려고한다.
이외에 스케줄링 조작 시스템콜 기본 제공(POSIX 기반), 스케줄링 알고리즘 변경으로 사용은 어려움
#include <sys/resource.h>
int which = PRIO_PROCESS;
id_t pid;
int ret;
pid = getpid();
ret = getpriority(which, pid);
코드는 다음과 같다.
#include <sys/resource.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int which = PRIO_PROCESS; // which 값을 PRIO_PROCESS 값으로 정의하고
id_t pid; // pid 값을 받을 수 있는 변수와 ret 값을 받을 수 있는 변수를 선언하고
int ret;
pid = getpid(); // pid 를 가져오는 함수
ret = getpriority(which, 0); // PRIO_PROCESS에 0 을 넣어주면 현재 프로세스
printf("PID=%d, PRIORITY=%d\n", pid, ret);
ret = nice(10); // nice 시스템 콜에 10을 넣어서 우선 순위 값을 10으로 설정하고
ret = getpriority(which, 0); // 설정이 되었는지 get으로 확인
printf("PID=%d, PRIORITY=%d\n", pid, ret);
ret = setpriority(which, 0, 5); //현재 프로세스의 우선 순위를 5로 설정
ret = getpriority(which, 0); // 설정이 되었는지 get으로 확인
printf("PID=%d, PRIORITY=%d\n", pid, ret);
return 0;
}
결과창에서는
PID = 18720, PRIORITY = 0
PID = 18720, PRIORITY = 10
PID = 18720, PRIORITY = 5
이렇게 출력된다.