루프 스케줄링을 위한 C 프로그램
우리는 해당 버스트 시간과 시간 퀀텀이 있는 n개의 프로세스가 제공되며 작업은 평균 대기 시간과 평균 처리 시간을 찾아 결과를 표시하는 것입니다.
라운드 로빈 스케줄링이란 무엇입니까?
라운드 로빈은 시간 공유 시스템을 위해 특별히 설계된 CPU 스케줄링 알고리즘입니다. 이는 라운드 로빈 프로세스에서 양자 시간 크기로 제한되는 한 가지 변경 사항이 있는 FCFS 스케줄링 알고리즘과 비슷합니다. 시간의 작은 단위는 Time Quantum 또는 Time Slice로 알려져 있습니다. 시간 할당량의 범위는 10~100밀리초입니다. CPU는 준비된 큐를 주어진 시간 조각으로 프로세스를 실행하기 위한 순환 큐로 처리합니다. 프로세스에 고정된 시간을 할당하기 때문에 선제적인 접근 방식을 따릅니다. 유일한 단점은 컨텍스트 전환의 오버헤드입니다.
우리가 계산해야 하는 것은 무엇입니까?
완료 시간은 프로세스가 실행을 완료하는 데 필요한 시간입니다
처리 시간은 프로세스 제출 및 완료
처리 시간 = 프로세스 완료 – 프로세스 제출
대기 시간은 처리 시간과 버스트 시간의 차이입니다.
대기 시간 = 처리 시간 – 버스트 시간
예
3개의 프로세스 P1, P2 및 P3이 제공되며 해당 버스트 시간은 24, 3 및 3
Process | Burst Time |
---|---|
P1 | 24 |
P2 | 3 |
P3 | 3 |
시간 퀀텀이 4밀리초이므로 프로세스 P1은 처음 4밀리초를 얻지만 실행을 완료하려면 20밀리초가 더 필요하지만 CPU는 첫 번째 퀀텀 이후에 이를 선점하고 CPU는 다음 프로세스 P2에 할당됩니다. 표에 표시된 것처럼 프로세스 P2는 실행을 완료하는 데 3밀리초만 필요하므로 CPU는 4밀리초 대신 3밀리초의 시간 할당에만 할당됩니다.
간트 차트를 사용하면 평균 대기 시간은 다음과 같이 계산됩니다. 아래 −
평균 대기 시간 = 17/3 = 5.66밀리초
Algorithm
Start Step 1-> In function int turnarroundtime(int processes[], int n, int bt[], int wt[], int tat[]) Loop For i = 0 and i < n and i++ Set tat[i] = bt[i] + wt[i] return 1 Step 2-> In function int waitingtime(int processes[], int n, int bt[], int wt[], int quantum) Declare rem_bt[n] Loop For i = 0 and i < n and i++ Set rem_bt[i] = bt[i] Set t = 0 Loop While (1) Set done = true Loop For i = 0 and i < n and i++ If rem_bt[i] > 0 then, Set done = false If rem_bt[i] > quantum then, Set t = t + quantum Set rem_bt[i] = rem_bt[i] - quantum Else Set t = t + rem_bt[i] Set wt[i] = t - bt[i] Set rem_bt[i] = 0 If done == true then, Break Step 3->In function int findavgTime(int processes[], int n, int bt[], int quantum) Declare and initialize wt[n], tat[n], total_wt = 0, total_tat = 0 Call function waitingtime(processes, n, bt, wt, quantum) Call function turnarroundtime(processes, n, bt, wt, tat) Print "Processes Burst Time Waiting Time turnaround time " Loop For i=0 and i<n and i++ Set total_wt = total_wt + wt[i] Set total_tat = total_tat + tat[i] Print the value i+1, bt[i], wt[i], tat[i] Print "Average waiting time = total_wt / n Print "Average turnaround time =total_tat / n Step 4-> In function int main() Delcare and initialize processes[] = { 1, 2, 3} Declare and initialize n = sizeof processes / sizeof processes[0] Declare and initialize burst_time[] = {8, 6, 12} Set quantum = 2 Call function findavgTime(processes, n, burst_time, quantum)
Example
实例演示
#include <stdio.h> // Function to calculate turn around time int turnarroundtime(int processes[], int n, int bt[], int wt[], int tat[]) { // calculating turnaround time by adding // bt[i] + wt[i] for (int i = 0; i < n ; i++) tat[i] = bt[i] + wt[i]; return 1; } // Function to find the waiting time for all // processes int waitingtime(int processes[], int n, int bt[], int wt[], int quantum) { // Make a copy of burst times bt[] to store remaining // burst times. int rem_bt[n]; for (int i = 0 ; i < n ; i++) rem_bt[i] = bt[i]; int t = 0; // Current time // Keep traversing processes in round robin manner // until all of them are not done. while (1) { bool done = true; // Traverse all processes one by one repeatedly for (int i = 0 ; i < n; i++) { // If burst time of a process is greater than 0 // then only need to process further if (rem_bt[i] > 0) { done = false; // There is a pending process if (rem_bt[i] > quantum) { // Increase the value of t i.e. shows // how much time a process has been processed t += quantum; // Decrease the burst_time of current process // by quantum rem_bt[i] -= quantum; } // If burst time is smaller than or equal to // quantum. Last cycle for this process else { // Increase the value of t i.e. shows // how much time a process has been processed t = t + rem_bt[i]; // Waiting time is current time minus time // used by this process wt[i] = t - bt[i]; // As the process gets fully executed // make its remaining burst time = 0 rem_bt[i] = 0; } } } // If all processes are done if (done == true) break; } return 1; } // Function to calculate average time int findavgTime(int processes[], int n, int bt[], int quantum) { int wt[n], tat[n], total_wt = 0, total_tat = 0; // Function to find waiting time of all processes waitingtime(processes, n, bt, wt, quantum); // Function to find turn around time for all processes turnarroundtime(processes, n, bt, wt, tat); // Display processes along with all details printf("Processes Burst Time Waiting Time turnaround time</p><p>"); // Calculate total waiting time and total turn // around time for (int i=0; i<n; i++) { total_wt = total_wt + wt[i]; total_tat = total_tat + tat[i]; printf("\t%d\t\t\t%d\t\t\t%d\t\t\t%d</p><p>",i+1, bt[i], wt[i], tat[i]); } printf("Average waiting time = %f", (float)total_wt / (float)n); printf("</p><p>Average turnaround time = %f</p><p>", (float)total_tat / (float)n); return 1; } // main function int main() { // process id's int processes[] = { 1, 2, 3}; int n = sizeof processes / sizeof processes[0]; // Burst time of all processes int burst_time[] = {8, 6, 12}; // Time quantum int quantum = 2; findavgTime(processes, n, burst_time, quantum); return 0; }
输ude
위 내용은 루프 스케줄링을 위한 C 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











쌍곡선 함수는 원 대신 쌍곡선을 사용하여 정의되며 일반 삼각 함수와 동일합니다. 제공된 각도(라디안)에서 쌍곡사인 함수의 비율 매개변수를 반환합니다. 그러나 반대로 하십시오. 즉, 반대로 하십시오. 쌍곡선 사인으로부터 각도를 계산하려면 쌍곡선 역사인 연산과 같은 역쌍곡선 삼각법 연산이 필요합니다. 이 과정에서는 라디안 단위의 쌍곡선 사인 값을 사용하여 각도를 계산하기 위해 C++에서 쌍곡선 역사인(asinh) 함수를 사용하는 방법을 보여줍니다. 쌍곡선 아크사인 연산은 다음 공식 -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}을 따릅니다. 여기서\:In\:은\:자연 로그\:(log_e\:k)

기본적으로 macOSSonoma는 데스크탑 배경화면을 클릭하면 모든 활성 창을 숨깁니다. 이는 데스크탑에 액세스해야 하는 파일이 많은 경우에 편리합니다. 그러나 이 동작이 너무 짜증난다면 이를 끌 수 있는 방법이 있습니다. Apple의 최신 macOS Sonoma Mac 운영 체제에는 "바탕화면을 표시하려면 배경화면을 클릭하세요."라는 새로운 옵션이 있습니다. 기본적으로 활성화되어 있는 이 옵션은 여러 개의 창을 열어두고 창을 최소화하거나 이동하지 않고도 데스크탑의 파일이나 폴더에 액세스하려는 경우 특히 유용할 수 있습니다. 이 기능을 활성화하고 바탕 화면 배경 무늬를 클릭하면 열려 있는 모든 창이 일시적으로 사라지고 바탕 화면에 직접 액세스할 수 있습니다. 완료되면 다시 할 수 있습니다.

이름 바꾸기 기능은 파일이나 디렉토리를 이전 이름에서 새 이름으로 변경합니다. 이 작업은 이동 작업과 유사합니다. 따라서 이 이름 바꾸기 기능을 사용하여 파일을 이동할 수도 있습니다. 이 함수는 stdio.h 라이브러리 헤더 파일에 있습니다. rename 함수의 구문은 다음과 같습니다. intrename(constchar*oldname,constchar*newname); rename() 함수의 함수는 두 개의 매개변수를 허용합니다. 하나는 oldname이고 다른 하나는 newname입니다. 두 매개변수는 모두 파일의 이전 이름과 새 이름을 정의하는 상수 문자에 대한 포인터입니다. 파일 이름이 성공적으로 변경되면 0을 반환하고, 그렇지 않으면 0이 아닌 정수를 반환합니다. 이름 바꾸기 작업 중

맵은 각 요소가 두 값, 즉 키 값과 맵 값의 쌍인 C++의 특수한 유형의 컨테이너입니다. 키 값은 각 항목을 인덱싱하는 데 사용되며 매핑된 값은 키와 연결된 값입니다. 매핑된 값이 고유한지 여부에 관계없이 키는 항상 고유합니다. C++에서 맵 요소를 인쇄하려면 반복자를 사용해야 합니다. 항목 집합의 요소는 반복자 개체로 표시됩니다. 반복자는 주로 배열 및 기타 유형의 컨테이너(예: 벡터)와 함께 사용되며 특정 범위 내의 특정 요소를 식별하는 데 사용할 수 있는 특정 작업 집합을 가지고 있습니다. 반복자는 범위나 컨테이너에 있는 다양한 요소를 참조하기 위해 증가하거나 감소할 수 있습니다. 반복자는 범위에 있는 특정 요소의 메모리 위치를 가리킵니다. 반복자를 사용하여 C++에서 지도 인쇄하기 먼저, 정의하는 방법을 살펴보겠습니다.

Strncmp는 string.h 파일에 있는 사전 정의된 라이브러리 함수로, 두 문자열을 비교하고 어느 문자열이 더 큰지 표시하는 데 사용됩니다. strcmp 함수(문자열 비교) 이 함수는 두 문자열을 비교합니다. 두 문자열에서 일치하지 않는 첫 번째 문자의 ASCII 차이를 반환합니다. 구문 intstrcmp(string1,string2); 차이가 0이면 string1=string2입니다. 차이가 양수이면 문자열1>문자열2입니다. 차이가 음수이면 string1<string2입니다. 예제 strncmp 함수 이 함수는 두 문자열의 처음 n자를 비교하는 데 사용됩니다. 구문 문자열

문자열이나 문자를 사용하는 것은 일부 논리 프로그래밍 문제를 해결할 때 때때로 매우 유용합니다. 문자열은 문자 모음으로, ASCII 값의 기호를 보유하는 데 사용되는 1바이트 데이터 유형입니다. 기호는 영문자, 숫자, 특수문자가 될 수 있습니다. 이번 글에서는 C++를 이용하여 문자가 영문자인지 알파벳인지 확인하는 방법을 알아보겠습니다. isalpha() 함수 확인 숫자가 문자인지 확인하려면 ctype.h 헤더 파일에서 isalpha() 함수를 사용할 수 있습니다. 문자를 입력으로 받아 알파벳이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이 함수의 사용법을 이해하기 위해 다음 C++ 구현을 살펴보겠습니다. 예제의 중국어 번역은 다음과 같습니다.

람다 표현식은 루프에서 벗어나기 때문에 특정 코드 예제가 필요합니다. 프로그래밍에서 루프 구조는 자주 사용되는 중요한 구문입니다. 그러나 특정 상황에서는 현재 루프 반복을 종료하는 대신 루프 본문 내에서 특정 조건이 충족될 때 전체 루프를 중단하고 싶을 수도 있습니다. 이때 람다 표현식의 특징은 루프에서 벗어나는 목표를 달성하는 데 도움이 될 수 있습니다. 람다 표현식은 내부적으로 간단한 함수 논리를 정의할 수 있는 익명 함수를 선언하는 방법입니다. 일반적인 함수 선언과는 다릅니다.

문제는 유클리드 알고리즘을 구현하여 두 정수의 최대 공약수(GCD)와 최소 공배수(LCM)를 구하고 주어진 정수로 결과를 출력합니다. 솔루션 두 정수의 최대 공약수(GCD)와 최소 공배수(LCM)를 찾기 위해 유클리드 알고리즘을 구현하는 솔루션은 다음과 같습니다. GCD와 LCM을 찾는 논리는 다음과 같습니다. - if (firstno*secondno!=0) { gcd= gcd_rec(firstno,secondno); printf("TheGCDof%dand%dis%d",
