北京工业大学 操作系统课设 报告

合集下载

(完整word版)北京工业大学操作系统实验报告0122

(完整word版)北京工业大学操作系统实验报告0122

操作系统实验报告专业计算机科学与技术年级本科三年级学号12070131姓名樊文舟目录:一、实验一—-————--——-————-—-—----—--———--———--—-----—--31。

实验目的———————————--——---————----—-——-——-—-----—-———-——-—--——————-32。

实验内容-———-—-—-—-——---——---———----—-——----———--—-———-—---———---—-33.实验要求-----—-——————-—-——----——-—-———-—-—-—-——---———————-———--—---34.实验设计—--——-——-———--——-——----—--——-—-—--—------—----—--—--————-—-35。

实验程序----———-—-——-————-—-—-—————-——-—-——----—--—--—----—--———-—-36.实验结果——------———--—-—--————------—————-———--————-——-——-—-—--—--—47.实验感想-—--——---—---—-——--—--—--—-—---——--——--—-----—---——-—-—-—--4二、实验二---—--——----—---—-———---—-———-——----———--—--—41.实验目的—--——-——-—-—---——---—--—-——-———------—-—--——-————----——-———52。

实验内容—-—---———---—-—-—-—-———---—-—---—-——-----——————-————-—--—--53。

实验要求-———--——--————---------——-—-----———--—------------———-—----5 4。

实验设计———---———----——-——----————--——---—---——--—---—————-—-—-—--—55.实验程序—--————-——--—-—-———-—-—--—-———-——-——-———----————-—-----——-—66.实验结果—-—-—-——--—----—-—-—--———--——-——--—————--——-—-————-——--——-—77.实验感想———-—----—-—---—--————-—-——---——-—-------—--—----————-——--—7三、实验三-——---———-——-—--——------——--————-----—--—----81。

操作系统课程设计实验报告(以Linux为例)

操作系统课程设计实验报告(以Linux为例)

目录目录 0一、实验环境 (1)二、实验报告总体要求 (1)实验一编译L INUX内核 (2)实验二观察L INUX行为 (6)实验三进程间通信 (13)一、实验环境Linux平台◆硬件平台:普通PC机硬件环境。

◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动管理器使用GRUB。

◆编译环境:伴随着操作系统的默认gcc环境。

◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。

二、实验报告总体要求在2013年11月25日前提交实验报告。

实验报告至少要求包含以下内容:1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意义。

2.问题提出:叙述本篇报告要解决什么问题。

注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。

3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2…等分开。

这是实验报告的关键部分,请尽量展开来写。

注意,这部分是最终课程设计的基本分的部分。

这部分不完成,本课程设计不会及格。

4.实验结果:按照自己的解决方案,有哪些结果。

结果有异常吗?能解释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。

本课程设计要得高分,应该在这部分下功夫。

5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。

6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:2,即10行源程序,至少要给出5行注释。

操作系统课程设计实验报告实验一编译Linux内核实验时间6小时实验目的认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。

实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。

计算机操作系统实验报告

计算机操作系统实验报告

中南大学计算机操作系统实验报告................................................................................................................................................................................................................1、增强学生对计算机操作系统基本原理、基本理论、基本算法的理解;2、提高和培养学生的动手能力。

1、每人至少选作1 题,多做不限;2、每人单独完成,可以讨论,但每人的设计内容不得彻底相同,抄袭或者有2 人/多人设计彻底一样者,不能通过;3、设计完成后,应上交课程设计文档,文档格式应是学校课程设计的标准格式,所有学生的封面大小、格式也必须一样;4、同时上交设计的软盘(或者以班刻录光盘)。

调度算法的摹拟:摹拟各种调度算法,并进行调度性能分析。

摹拟了一个作业调度算法,其中用到了先来先服务算法(FCFS)、短作业优先算法(SJF)、最高响应比优先算法(HRN)三种算法。

如下,分别为三种算法的程序流程图。

图1 - 开始界面图 2 –输入作业的信息(名字、提交时间、运行时间) 图3 –选择算法(FCFS 、SJF、HRN)图4、5 –选择FCFS 算法后输出结果图6、7 –选择SJF 算法后输出结果图8、9 –选择HRN 算法后输出结果能体现公平性;一旦一个较长的作业进入系统后就会长期的占用系统的资源,这样如果有优先级较高的短作业需要执行的话需要等待很长期。

比前者改善了平均周转时间和平均带权周转时间,缩短作业的等待时间,提高系统的吞吐量;对长作业非常不利,可能长期得不到执行,未能一句作业的紧迫程度来划分执行的优先级,难以准确估计作业的执行时间,从而影响调度性能。

这种算法是对FCFS 方式和SJF 方式的一种综合平衡。

北京工业大学 操作系统软件课设 分析linux内存管理机制

北京工业大学 操作系统软件课设 分析linux内存管理机制

任务2分析Linux内核—内存管理学号____________姓名____________指导教师____________2019年12月一、摘要本次系统软件课程设计,我们小组选择的题目是分析Linux内核-内存管理。

阅读该部分的代码、了解其运行机制,深入理解Linux内存管理的相关具体实现过程。

Linux中,内存管理主要由段页式来进行管理的,涉及虚拟内存技术。

这其中涉及到三个关键内容:①每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址。

②虚拟地址可通过每个进程上的页表与物理地址进行映射,获得真正的物理地址。

③如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已经耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。

与虚拟内存相关的主要有:与进程相关的结构体、映射的形成等等。

与物理页面相关的主要有:内存的分配、页面的换入换出等等。

本文将尽可能通过对Linux内存管理的主要的代码函数、相关功能实现及结构区阐释Linux系统内存管理的实现方式。

二、关键词虚拟地址空间、用户空间、内核空间、物理内存、虚拟内存、内存分配、页分配与释放、页的换入和换出、内存块的分配与释放、栈的静态分配、缺页异常。

三、引言计算机中的存储器分为主存储器和辅助存储器。

因为实际主存储器的容量比较小而不能满足多道程序的要求,所以作为一种解决策略,采用将程序一部分装入主存,把当前不被执行的部分暂时存放在辅助存储器中,用到时再立即调入主存中。

Linux内存管理就使用了这种解决策略,也就是所谓的虚拟内存技术。

基于此,我们将在这里阐述Linux内存管理技术,包括它的内存管理策略、内存分配策略、内存映射技术、内存交换、页面失效处理等等。

我们小组一共两位成员:郑鑫(17071101)、侯宇(17071125)。

考虑到每个文件以及函数功能以及相关内容,所做详细分工如下:由小组成员郑鑫负责vmalloc.c文件、page_io.c文件、page_alloc.c文件和mmap.c文件的阅读和分析。

北京工业大学-嵌入式操作系统的报告5000字

北京工业大学-嵌入式操作系统的报告5000字

嵌入式操作系统课程报告(2021-2022第1学期)课程题目:__嵌入式操作系统______姓名:_______学号:______学院:____信息学部___专业:__班级:指导教师:_一、嵌入式操作系统1、嵌入式操作系统的概念嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统。

嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。

嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。

它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。

目前在嵌入式领域广泛使用的操作系统有:嵌入式实时操作系统µC/OS-II、嵌入式Linux、Windows Embedded、VxWorks 等,以及应用在智能手机和平板电脑的Android、iOS等。

2、嵌入式操作系统的特点1)系统内核小由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。

比如Enea公司的OSE分布式系统,内核只有5K。

2)专用性强嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。

同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。

3)系统精简嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。

4)高实时性高实时性的系统软件(OS)是嵌入式软件的基本要求。

而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。

5)多任务的操作系统嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。

操作系统原理及应用课程设计报告

操作系统原理及应用课程设计报告

《操作系统原理及应用》课程设计报告 Linux系统服务管理及安全设计学院(系): 计算机科学与工程学院班 级: 学号学生姓名:指导教师:时间: 从 2012 年 05 月14日 到 2012 年05月18日一、课程设计的目的本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及Linux安全服务管理,加强学生的动手操作能力。

二、课程设计要求设计一套安全的系统 Linux要求:1. 系统不能被破解密码;2. 系统不能被恶意重启;3. 只有指定用户才能ssh 登录系统,保障系统安全;4. 编写防火墙策略,保障系统安全,只开放允许访问的tcp 22, tcp 80,tcp 20 21;5.搭建一个Web网站;6.编写shell程序,阻止恶意攻击服务器的来源IP,连接服务器.三、课程设计内容3.1、 Redhat 基础及权限控制Linux 安装中的重要步骤:引导安装程序、磁盘分区、网络参数配置、密码设置、软件包选择Linux 系统引导过程:服务器硬件自检、引导MBR、引导Kernel、引导驱动及服务、自定义加载项、6种引导方式介绍(/etc/inittab)Linux root 密码破解:单用户模式,进行root密码破解Linux 加密防止 root 密码破解:明文加密 (password) 、非明文加密 (grub-md5-crypt )Linux防止恶意重启:禁用ctrl+alt+del 重启功能 (/etc/inittab)Linux文件权限数字表示:可读 R 4、可写 W 2、可执行 X 1Linux文件权限调整:修改所有者 chown 、修改权限 chmodLinux网络参数配置:网络IP地址配置、同一网卡配置多个IP地址Linux查看IP及route:Ipconfig、 ip add、route -nLinux常用命令文件管理类:ls cat more vi cp rm find paste wc grep head tail 磁盘管理:df du fdisk mkfs mount umount系统状态:uptime last vmstat iostat top free3.2、 软件管理及Shell编程Linux rpm 包的管理 :软件包安装、软件包升级、查询已安装的软件包Linux 源码包的管理 :源码包安装、configure、make、make test、make install、源码包删除Linux 文本处理 :文本编辑器、 vi 编辑器Linux Shell编程中常用命令条件测试:test 或者 []、-d 目录、-f 文件、-s 文件大小非0正则表达示:^ 行首、$ 行尾、以 $ 打头的命令、$? 上一个命令执行结果、$1 输入的第1个参数3.3、存储管理及系统管理Linux 系统常用服务管理 :常用系统服务启动与关闭、系统设置 服务器设置 服务常用系统服务介绍Network 网络服务、sshd ssh 远程连接服务Httpd Apache Web 服务器、Smb 文件共享服务器Vsftp FTP 服务器、Bind DNS 服务器Iptables 防火墙、Linux 进程管理进程查看 top , ps –ef 结束进程 Kill id、Kill –9 idLinux 文件系统管理磁盘分区、fdisk 、格式化分区、mkfs.ext3 、挂载分区、mount、卸载分区、umountLinux 卷管理 LVM磁盘分区 fdisk (disk type id: 8e)建立 PV pvcreate pvdispaly建立 VG vgcreate vgchange -a y (激活VG) vgdisplay建立 LV lvcreate lvdisplay格式化LV make.ext3挂载 LV mount缷载LV umountLinux 系统管理 :以图形化的形式 讲解常用系统管理 、用户和组 、日期和时间、显示Linux 系统日志管理系统日志文件位置 、/var/log/message观察日志变化、tail -f /var/log/message筛选日志内容、grep “error” /var/log/message3.4、常用服务器搭建、安全配置Linux openSSH 安全配置 (/etc/ssh/sshd_config )修改SSH服务端口:# Port 22 修改为 Port 9022修改SSH连接协议为版本2:#Protocol 2,1 修改为 Protocol 2权限只定用户连接SSH:AllowUsers user1重启ssh服务系统设置 服务器设置 服务,启动服务”sshd”、使用命令 service sshd restart使用软件连接SSH服务:在Windows上使用putty.exeLinux http服务器配置检查所需要的软件包[root@rh9 /]# rpm -qa | grep httphttpd-2.0.40-21libghttp-1.0.9-7httpd-manual-2.0.40-21redhat-config-httpd-1.0.1-18安装http服务软件包通过系统的”添加删除程序功能”进行安装、使用rpm –ivh 软件包名进行安装配置HTTP网站网页默认存放位置:/var/启动HTTP网站服务系统设置 服务器设置 服务,启动服务”httpd”、使用命令 service httpd start访问Linux Web网站: IPLinux dns服务器配置检查所需要的软件包[root@rh9 /]# rpm -qa | grep bindredhat-config-bind-1.9.0-13bind-utils-9.2.1-16ypbind-1.11-4bind-9.2.1-16安装DNS服务软件包通过系统的”添加删除程序功能”进行安装、使用rpm –ivh 软件包名进行安装配置DNS服务配置反向解析、配置正向解、异常解决 DNS服务不能启动。

操作系统课程设计报告

操作系统课程设计报告

操作系统课程设计报告概述:本课程设计旨在使学生熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

主要任务:本课程设计的主要任务是设计和实现一个简单的文件系统,包括建立文件存储介质的管理机制、建立目录(采用一级目录结构)、文件系统功能(显示目录、创建、删除、打开、关闭、读、写)和文件操作接口(显示目录、创建、删除、打开、关闭、读、写)。

系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,包括文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。

系统建立了文件目录树,存储文件系统中的所有文件。

对于用户名下的文件,用文件目录树的分支来存储。

采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作即可。

整体设计框架:系统初始化界面由创建用户存储空间、管理文件、退出系统三个模块组成。

用户创建由创建用户存储空间、进入目录、删除用户存储空间、显示所有用户存储空间等模块组成。

然后各个模块再由一些小模块组成。

其中创建文件、打开关闭文件、读写文件等文件操作模块包括在进入目录模块里面。

系统实现:以下是本课程设计的主要内容的实现程序代码:cincludeincludeincludetypedef struct file{ char name[10];struct file *next; File;typedef struct content{ char name[10];File *file;int f_num;struct content *next; Content;typedef struct user{ char name[10];char psw[10]; Content *con;struct user *next; User;char cur_user[20];XXX;int user_num=0;添加文件:在该函数中,我们首先需要获取文件名,然后检查是否已经存在该文件。

北京工业大学操作系统实验报告

北京工业大学操作系统实验报告

操作系统实验报告姓名: xxx学号: 110703xx完成时间:2013年11月21日目录:实验一:UNIX/LINUIX入门 (3)实验二:进程管理 (5)实验三:线程的管理 (11)实验四:利用信号量实现进程间通信 (15)实验五:基于消息队列和共享内存的进程间通信 (20)实验六:一个进程启动另一个程序的执行 (25)实验一UNIX/LINUIX入门一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX 下c语言程序的编写、编译、调试和运行方法。

二、实验内容1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

2、练习UNIX/LINUX的文本行编辑器vi的使用方法3、熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。

用vi编写一个简单的显示“Hello,World!”c语言程序,用gcc编译并观察编译后的结果,然后运行它。

三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验设计代码如下:#include<stdio.h>int main() {printf("Hello, world");return 0;}五、运行结果六、收获及机会此次实验让我熟悉了c语言编译器cc/gcc的使用方法。

七、参考资料《实验指导书》实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。

试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void main() { PCB *ready_head, *finish_head, *ready_ptr, *finish_ptr, *ready_rear,
*finish_rear;//就绪队列头指针,尾指针,操作指针和完结队列的头指针,尾指针,操作 指针
int process_num = 0;//进程数 int reamin_num;//剩余进程数 int choose;//算法选择 1 时间片轮转 2.先来先服务 while (1) {
int choose;//算法选择 1 时间片轮转 2.先来先服务
4.3.2 时间片轮转算法
结果演示:
4.3.3 先来先服务算法
结果演示:
4,3,4 实验源码:
#include <stdio.h> #include <malloc.h> #include<string.h>
typedef struct node { char name[10];//进程标识符 int prio;//进程优先数 int round_num;//进程时间轮转时间片 int cputime;//进程占用 cpu 时间 int needtime;//还需的时间 int count;//计数器 char state;//进程状态 struct node* next;
}PCB;//进程控制块
变量说明:
PCB *ready_head, *finitr, *ready_rear, *finish_rear;//就绪队列头指针,尾指针,操作指针和完结队列的头指针,尾指针,操作 指针
int process_num = 0;//进程数 int reamin_num;//剩余进程数
printf("请输入第%d 个进程的标识符以及运行时间:\n", i + 1); if (0 == i) {
ready_head = (PCB *)malloc(sizeof(PCB));
ready_rear = ready_head;//构造头结点 ready_rear->next = ready_head;//首尾相连 InitPCB(ready_head); scanf("%s%d", ready_head->name, &ready_head->needtime); } else { ready_ptr = (PCB *)malloc(sizeof(PCB)); InitPCB(ready_ptr); scanf("%s%d", ready_ptr->name, &ready_ptr->needtime); ready_rear->next = ready_ptr; ready_ptr->next = ready_head; ready_rear = ready_rear->next; } } finish_head = NULL;//初始化为空 while (ready_head->needtime > 0) { printf("=================新一轮调度初态================\n"); printf("进程名\tcpu 时间\t 所需时间\t 状态\n"); ready_ptr = ready_head;//ptr 用来保留原有 head 信息,用于输出链表 finish_ptr = finish_head;//ptr 用来保留原有 head 信息,用于输出链表 ready_head->state = 'R';//就绪队列头设置为运行 for (int i = reamin_num; i > 0; i--) {//输出所有剩余节点信息 printf("%s\t%d\t%d\t%c\n", ready_ptr->name, ready_ptr->cputime, ready_ptr->needtime, ready_ptr->state); ready_ptr = ready_ptr->next; } while (finish_ptr != NULL) {//输出调度结束节点的信息 printf("%s\t%d\t%d\t%c\n", finish_ptr->name, finish_ptr->cputime, finish_ptr->needtime, finish_ptr->state); finish_ptr = finish_ptr->next; } //getch(); ready_ptr = ready_head;//ptr 用来保留原有 head 信息,用于释放空间 ready_head->cputime++;//所用时间增加 ready_head->needtime--;//需要时间减 1 ready_head->state = 'W';//调度结束,还原就绪态 if (0 == ready_head->needtime) {//如果不再需要时间且为队头 ready_head = ready_head->next;//循环链表的移动 ready_rear->next = ready_head; ready_ptr->next = NULL;//断开连接 ready_ptr->state = 'F'; if (reamin_num == process_num) {//头一个进入 finish 队列的
}PCB;
void InitPCB(PCB* pcb) { strcpy(pcb->name, "none"); pcb->prio = 1000; pcb->round_num = 0; pcb->cputime = 0; pcb->needtime = 0; pcb->count = 0; pcb->state = 'W'; pcb->next = NULL;
ready_ptr = ready_ptr->next; } while (finish_ptr != NULL) {//输出调度结束节点的信息
printf("%s\t%d\t%d\t%c\n", finish_ptr->name, finish_ptr->cputime, finish_ptr->needtime, finish_ptr->state);
printf("请选择调度算法:\n"); printf("1. 时间片轮转法 2.先来先服务算法 0.退出\n"); scanf("%d", &choose); if (0 == choose) {
return; } if (1 == choose) {
printf("请输入进程数:\n"); scanf("%d", &process_num); reamin_num = process_num;//初始化剩余进程数为进程数 for (int i = 0; i < process_num; i++) {
四、实验六.进程调度
4.1 设计目的:
(1)要求学生设计并实现一个模拟进程调度的算法(时间片轮转及先来先服务)。 (2)理解进程控制块的结构。 (3)理解进程运行的并发性。 (4)掌握进程调度算法。
4.2 设计要求:
(1) 实现时间片轮转算法完成进程的调度。 (2) 实现先来先服务算法完成进程的调度。
操作系统课程设计
学 号 110703xx 姓 名 xxx 指导教师 金雪云
2014 年 1 月
一、 报告摘要
报告实现了三次实验的全部要求,均以流程图和源代码的形式做了展示,并附上了实验 结果图。
二、 关键词
进程调度,空间分配,磁盘调度,流程图。
三、 引言
本次实验我选择的是完成实验六、实验七和实验九三个任务。
finish_ptr = finish_ptr->next; } ready_ptr = ready_head;//ptr 用来保留原有 head 信息,用于释放空间 ready_head->cputime++;//已用时间加 1 ready_head->needtime--;//需要时间减一 //ready_head->state = 'W';//调度结束,还原就绪态 if (0 == ready_head->needtime) {//如果不再需要时间
finish_rear = finish_head = ready_ptr; } else {
finish_rear->next = ready_ptr;
finish_rear = ready_ptr; } reamin_num--; } else {//如果没有做完则移动到队尾,下一个作业变为队头 ready_rear = ready_head; ready_head = ready_head->next; } } finish_ptr = finish_head;//ptr 用来保留原有 head 信息,用于输出链表 printf("=================调度结束================\n"); while (finish_ptr != NULL) {//输出调度结束节点的信息 printf("%s\t%d\t%d\t%c\n", finish_ptr->name, finish_ptr->cputime, finish_ptr->needtime, finish_ptr->state); finish_ptr = finish_ptr->next; } } if (2 == choose) { printf("请输入进程数:\n"); scanf("%d", &process_num); reamin_num = process_num;//初始化剩余进程数为进程数 for (int i = 0; i < process_num; i++) { printf("请输入第%d 个进程的标识符以及运行时间:\n", i + 1); if (0 == i) { ready_head = (PCB *)malloc(sizeof(PCB)); ready_rear = ready_head;//构造头结点 InitPCB(ready_head); scanf("%s%d", ready_head->name, &ready_head->needtime); } else { ready_rear->next = (PCB *)malloc(sizeof(PCB)); InitPCB(ready_rear->next); scanf("%s%d", ready_rear->next->name, &ready_rear->next->needtime); ready_rear = ready_rear->next; } } finish_head = NULL;//初始化为空 while (reamin_num > 0) { printf("=================新一轮调度初态================\n"); printf("进程名\tcpu 时间\t 所需时间\t 状态\n"); ready_ptr = ready_head;//ptr 用来保留原有 head 信息,用于释放空间 finish_ptr = finish_head; ready_head->state = 'R';//就绪队列头设置为运行 for (int i = reamin_num; i > 0; i--) {//输出所有剩余节点信息 printf("%s\t%d\t%d\t%c\n", ready_ptr->name, ready_ptr->cputime, ready_ptr->needtime, ready_ptr->state);
相关文档
最新文档