【操作系统】处理机调度

2024-01-02 02:36

本文主要是介绍【操作系统】处理机调度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一. 实验目的
  • 二. 实验内容
  • 三. 实验步骤
  • 四. 实验结果
  • 五. 实验总结
  • 附:系列文章

一. 实验目的

(1)加深对进程概念的理解,明确进程和程序的区别
(2)深入理解系统如何组织进程
(3)理解常用进程调度算法的具体实现

二. 实验内容

(1)编写C程序模拟实现单处理机系统中的进程调度算法,实现对多个进程的调度模拟,要求采用常见进程调度算法(如先来先服务、时间片轮转和优先级调度等算法)进行模拟调度。

三. 实验步骤

(1)编写C程序:

#include <stdio.h>
#include <stdlib.h>
#define getpch(type) (type*)malloc(sizeof(type))
struct pcb {char name[10];char state;int nice;int ntime;int rtime;struct pcb *link ;
}*ready=NULL,*p;typedef struct pcb PCB;void sort() {PCB *first,*second;int insert=0;if((ready==NULL)||(p->nice > ready->nice)) {p->link=ready;ready=p;} else {first=ready;second=first->link;while(second !=NULL) {if(p->nice>second->nice) {p->link=second;first->link=p;second=NULL;insert=1;} else {first=first->link;second=second->link;}}if(insert==0)first->link=p;}
}void input() {int i,num;printf("\n请输入被调度的进程数目:");scanf("%d",&num) ;for(i=0; i<num; i++) {printf("\n进程号No.%d : ",i);p=getpch(PCB);printf("\n输入进程名:");scanf("%s",p->name) ;printf("输入进程优先级:");scanf("%d",&p->nice);printf("输入进程运行时间:");scanf("%d",&p->ntime);printf("\n");p->rtime=0;p->state= 'W';p->link=NULL;sort();}
}int space() {int l=0;PCB *pr=ready;while(pr !=NULL) {l++;pr=pr->link;}return (l);
}void disp(PCB *pr) {printf("\n qname lt state lt nice ltndtime \truntime \n");printf("%slt",pr->name);printf("%c\t",pr->state);printf("%d\t",pr->nice);printf("%d\t",pr->ntime);printf("%d\t",pr->rtime);printf("\n");
}void check() {PCB *pr;printf("\n****当前正在运行的进程是:%s",p->name);disp(p);pr=ready;if(pr!=NULL)printf( "\n****当前就绪队列为:");elseprintf( "\n****当前就绪队列为空\n");while(pr !=NULL) {disp(pr);pr=pr->link;}
}void destroy() {printf("进程[%s]己完成。\n",p->name);free(p);
}void running() {(p->rtime)++;if(p->rtime==p->ntime)destroy();else {(p->nice)--;p->state= 'W';sort();}
}int main( ) {int len,h=0;char ch;input();len=space();while( len!=0 && ready !=NULL)	{h++;printf( "in The execute number:%d\n",h);p=ready ;ready=p->link;p->link=NULL;p->state='R';check();running();printf( "\n按任意键继续.......\n");ch=getchar();}printf( "\n\n所有进程己经运行完成!\n");ch=getchar();return 0;
}

这段代码是一个模拟操作系统进程调度的程序。下面对代码进行详细分析:

  1. 定义了一个进程控制块(PCB)的结构体,包含进程名(name)、状态(state)、优先级(nice)、需要运行时间(ntime)、已运行时间(rtime)和链接指针(link)。
  2. 定义了一个全局变量ready,用于存储就绪队列中的所有进程。还定义了一个指针p,用于指向当前正在执行的进程。
  3. 定义了一个宏函数getpch(),用于动态分配内存空间来创建一个进程控制块。
  4. 定义了一个函数sort(),用于将新创建的进程按照优先级插入到就绪队列中。
  5. 定义了一个函数input(),用于从用户输入中获取要调度的进程的信息,并将其插入到就绪队列中。
  6. 定义了一个函数space(),用于计算就绪队列中的进程数目。
  7. 定义了一个函数disp(),用于显示某个进程的信息。
  8. 定义了一个函数check(),用于显示当前正在运行的进程和就绪队列中的进程信息。
  9. 定义了一个函数destroy(),表示进程已完成,释放其占用的内存空间。
  10. 定义了一个函数running(),表示当前正在运行的进程进行运行,如果运行时间等于需要运行时间,则调用destroy()函数,否则将优先级减1,并将进程插入到就绪队列中。
  11. 主函数main()中,首先调用input()函数获取要调度的进程信息。然后进入一个循环,循环条件为就绪队列不为空且进程数目不为0。在循环中,将就绪队列的第一个进程取出来赋给p,并从就绪队列中移除。然后调用running()函数进行运行,最后输出当前正在运行的进程和就绪队列的信息。循环结束后,输出所有进程已经运行完成的信息。

总结:这段代码实现了一个简单的进程调度模拟,根据进程的优先级进行调度,并按照时间片轮转的方式进行运行。

四. 实验结果

处理机调度

五. 实验总结

处理机调度是操作系统中的一个关键部分,它负责决定哪个进程将获得处理器运行的机会。处理机调度的目标是实现公平性、高效性和响应时间的优化。

处理机调度的主要任务是根据一定的算法选择一个进程从就绪队列中调出,然后将处理器分配给它执行。调度算法的选择对系统的性能和效率有重要影响。

常见的调度算法有以下几种:

  1. 先来先服务(FCFS)调度算法:按照进程的到达顺序进行调度,先到达的进程先执行。

  2. 短作业优先(SJF)调度算法:根据进程的执行时间进行调度,执行时间越短的进程会被优先调度。

  3. 优先级调度算法:根据进程的优先级进行调度,优先级高的进程会被优先调度。可以根据进程的重要性、紧急程度或其他指标来确定优先级。

  4. 时间片轮转调度算法:每个进程被分配一个固定的时间片,在时间片用完之前,如果进程没有执行完毕,会被挂起,然后选择下一个进程运行。

  5. 多级反馈队列调度算法:将就绪队列按照优先级划分为多个队列,每个队列都有一个时间片,进程首先被放入优先级最高的队列,如果运行时间超过时间片,则进程会被移到下一个优先级队列。

  6. 最短剩余时间优先(SRTF)调度算法:根据进程剩余需要执行的时间进行调度,剩余执行时间最短的进程会被优先调度。

处理机调度算法的选择要根据系统的需求和性能特点进行权衡。不同的调度算法在不同的场景下会有不同的效果。例如,短作业优先算法适合执行时间短的任务,而多级反馈队列算法适合在系统中有不同优先级的进程。

处理机调度对于操作系统的性能和响应时间至关重要。一个高效的调度算法可以提高系统的利用率和响应速度,同时也能够保证公平性和资源的合理分配。因此,处理机调度是操作系统中一个非常重要的功能模块。

附:系列文章

序号文章目录直达链接
1初识Linuxhttps://want595.blog.csdn.net/article/details/133018477
2进程的控制和通信https://want595.blog.csdn.net/article/details/133900024
3多线程同步与互斥https://want595.blog.csdn.net/article/details/134135476
4处理机调度https://want595.blog.csdn.net/article/details/135327578
5死锁处理-银行家算法https://want595.blog.csdn.net/article/details/135327618
6虚拟存储管理-页面置换算法https://want595.blog.csdn.net/article/details/135327651

这篇关于【操作系统】处理机调度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561103

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟