Search

시스템 콜 활용하여 코딩하기

Tags
Kernel

개요

운영체제 전공에서 시스템 콜을 활용하여 진행하는 과제가 생겼습니다. 과제를 해결하면서 학습했던 지식들을 짧게 나마 정리해보고자 합니다.

1. 커널의 스케쥴링 정책

리눅스 커널은 CFS (Completely Fair Scheduling) 을 사용하고 있습니다.
과제에서 요구하고 있는 사항은 다음과 같습니다.
리눅스 커널의 스케줄링 정책을(CFS, RT_FIFO, RT_RR) 변경하면서 프로세스들의 실행 순서 및 실행 시간을 확인할 수 있는 프로그램 작성
총 네개의 스케쥴링 정책 (CFS_DEFAULT, CFS_NICE, RT_FIFO, RT_RR) 중 하나를 입력 받아 해당 스케쥴링 정책을 적용하는 프로세스 21개를 생성 후 실행 시간을 출력하는 것이 과제의 목표입니다.
우선 스케쥴링 정책을 어떻게 바꿀까요?
#include <sched.h> int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);
Java
복사
다음 명령어를 통해 바꿀 수 있습니다.

CPU Core 중 하나만 사용하게 하는 명령어

Kernel Boot Parameter 변경:
GRUB (GRand Unified Bootloader)를 사용하는 경우:
1.
/etc/default/grub 파일을 편집합니다.
2.
GRUB_CMDLINE_LINUX 항목을 찾아서 maxcpus=1을 추가합니다.
makefileCopy code GRUB_CMDLINE_LINUX="... maxcpus=1"
Makefile
복사
3.
설정을 저장하고 sudo update-grub을 실행합니다.
4.
시스템을 재부팅합니다.
sudo -s는 필수

Time Slice 값 변경 명령어

cat /proc/sys/kernel/sched_rr_timeslice_ms
Timeslice 값을 어떻게 가져왔는가?
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp = fopen("/proc/sys/kernel/sched_rr_timeslice_ms", "r"); if (fp == NULL) { perror("Error opening file"); return EXIT_FAILURE; } int timeslice; if (fscanf(fp, "%d", &timeslice) != 1) { perror("Error reading timeslice"); fclose(fp); return EXIT_FAILURE; } printf("Current RR time quantum: %d ms\n", timeslice); fclose(fp); return 0; }
Java
복사