电子科技大学---操作系统课程实验(一)

HDU杭电操作系统实验报告-操作系统课程设计-咸鱼的自留地 杭州电子科技大学操作系统之简单文件系统 杭州电子科技大学操作系统课程设计:Linux内核编译、内核模块、进程管理、简单的文件系统实现 阅读详情

 电子科技大学—操作系统课程实验(一)

系统化思维模式下计算机操作系统进程与资源管理设计

1.实验目的:

设计和实现进程与资源管理,并完成Test shell的编写,以建立系统的进程管理、调度、资源管理和分配的知识体系,从而加深对操作系统进程调度和资源管理功能的宏观理解和微观实现技术的掌握。

2.实验内容:

在实验室提供的软硬件环境中,设计并实现一个基本的进程与资源管理器。该管理器能够完成进程的控制,如进程创建与撤销、进程的状态转换;能够基于优先级调度算法完成进程的调度,模拟时钟中断,在同优先级进程中采用时间片轮转调度算法进行调度;能够完成资源的分配与释放,并完成进程之间的同步。该管理器同时也能完成从用户终端或者指定文件读取用户命令,通过Test shell模块完成对用户命令的解释,将用户命令转化为对进程与资源控制的具体操作,并将执行结果输出到终端或指定文件中。

3.实验环境:

设计平台和语言不限,平台可为Linux或Windows, 语言可为C,C++,Java等。

4.实验要求:

要求学生熟悉掌握计算机操作系统进程管理和资源管理的基本原理和关键技术,包含进程控制、进程调度、进程同步及资源管理,在此基础上设计和实现进程和资源管理器。具体步骤包括:了解功能需求、完成系统总统设计、相关的数据结构定义和具体函数设计。
同时要求设计与实现驱动程序(test shell):驱动该管理器工作,即将命令语言(即用户要求)转换成对与内核函数(如create, request等)的调用。

5.实验过程:

5.1总体设计

系统总体架构如图1所示,最右边部分为进程与资源管理器,属于操作系统内核的功能。该管理器具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。

这里写图片描述
图1 系统总体结构
图1中间绿色部分为驱动程序test shell, 设计与实现test shell,该test shell将调度所设计的进程与资源管理器来完成测试。Test shell的应具有的功能:
-从终端或者测试文件读取命令;
-将用户需求转换成调度内核函数(即调度进程和资源管理器);
-在终端或输出文件中显示结果:如当前运行的进程、错误信息等。

图1最左端部分为:通过终端(如键盘输入)或者测试文件来给出相应的用户命令,以及模拟硬件引起的中断

5.2Test shell设计


Test_shell的功能如4.1所述,代码示例如图1中绿色部分。
Test shell要求完成的命令(Mandatory Commands)
-init
-cr (=1 or 2) // create process
-de // delete process
-req <# of units> // request resource
-rel <# of units> // release resource
-to // time out

可选实现的命令
-list all processes and their status
-list all resources and their status
-provide information about a given process

Test shell 输出示例:
* Process init is running //the running process create new process
* ….
shell> cr A 1 // this command is from terminal and indicates creating process A with priority 1.Test shell will invoke kernel function: create
* Process A is running //display
shell> cr B 2 // A create process B with priority 2
* Process B is running
shell> cr C 1 // B create process C with priority 1, C is at the end of ready list
* Process B is running //Because C’s priority is lower than B’s

5.3 进程管理设计

5.3.1 进程状态与操作
进程状态: ready/running/blocked
进程操作:
 创建(create): (none) -> ready
 撤销(destroy): running/ready/blocked -> (none)
 请求资源(Request): running -> blocked (当资源没有时,进程阻塞)
 释放资源(Release): blocked -> ready (因申请资源而阻塞的进程被唤醒)
 时钟中断(Time_out): running -> ready
 调度:ready -> running / running ->ready

5.3.2 进程控制块结构(PCB)
• PID(name)
• CPU state — not used
• Memory — not used
• Open_Files — not used
• Other_resources //: resource which is occupied
• Status: Type & List// type: ready, block, running…., //List: RL(Ready list) or BL(block list)
• Creation_tree: Parent/Children
• Priority: 0, 1, 2 (Init, User, System)
这里写图片描述
图2 PCB结构示意

就绪进程队列:Ready list (RL)
这里写图片描述
图3 Ready list 数据结构

3个级别的优先级,且优先级固定无变化
2 =“system”
1 = “user”
0 = “init”
每个PCB要么在RL中,要么在block list中 。当前正在运行的进程,根据优先级,可以将其放在RL中相应优先级队列的首部。

5.3.3 主要函数
 创建进程:
Create(initialization parameters)// initialization parameters可以为进程的ID和优先级,优先级:初始进程0、用户进程1和系统进程2。
{
create PCB data structure
initialize PCB using parameters //包括进程的ID,优先级、状态等
link PCB to creation tree /连接父亲节点和兄弟节点,当前进程为 父亲节点,父亲节点中的子节点为兄弟节点/
insert(RL, PCB)//插入就绪相应优先级队列的尾部
Scheduler()
}
Init进程在启动时创建,可以用来创建第一个系统进程或者用户进程。新创建的进程或者被唤醒的进程被插入到就绪队列(RL)的末尾。
示例:
图4中,虚线表示进程A为运行进程,在进程A运行过程中,创建用户进程B:cr B 1,数据结构间关系图4所示

这里写图片描述
图4 进程数据结构间关系
(为了简单起见,A和B分别指向RL的链接可以不要)
 撤销进程


Destroy (pid)
{
get pointer p to PCB using pid
Kill_Tree(p)
Scheduler() //调度其他进程执行
}
Kill_Tree(p)
{
for all child processes q Kill_Tree(q) //嵌套调用,撤销所有子孙进程
free resources //和release调用类似的功能
delete PCB and update all pointers
}
Process can be destroyed by any of its ancestors or by itself (exit)


###5.4资源管理设计
5.4.1 主要数据结构
资源的表示:设置固定的资源数量,4类资源,R1,R2,R3,R4,每类资源Ri有i个
资源控制块Resource control block (RCB) 如图5所示
RID: 资源的ID
Status: 空闲单元的数量
Waiting_List: list of blocked process
  ![这里写图片描述](http://img.blog.youkuaiyun.com/20170514181446756?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3ByaW5nY29kZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图5 资源数据结构RCB


5.4.2请求资源
所有的资源申请请求按照FIFO的顺序进行
情况一:当一类资源数量本身只有一个

Request(rid)
{
       r = Get_RCB(rid);
       if (r->Status == 'free') //只有一个资源时可以用free和allocated来表示资源状态
        {
              r->Status = 'allocated‘;
          insert(self->Other_Resources, r);//self 为当前请求资源的进程PCB,insert以后r为self进程占有的资源, 参PCB结构图
          } else {
                 self->Status.Type = 'blocked'; 
                 self->Status.List = r;//point to block list, self is blocked by r
                         remove(RL, self);// remove self from the ready list(self can be put at the head of RL when it is running).
     insert(r->Waiting_List, self);// 将进程self插入到资源r的等待队列尾部
   Scheduler(); 
}
}况二:一类资源有多个的情况(multi_unit)
Request(rid, n) // n为请求资源数量
{
   r = Get_RCB(rid);
   if (u ≥ n) // u为r->Status.u, 即可用资源数量,参资源数据结构图
{
      u-n;
      insert(self->Other_Resources, r, n);//self 为当前请求资源的进程PCB,insert以后n 个r为self进程占有的资源, 参PCB结构图
   } 
else 
{
  if (n>k) exit;//k为资源r的总数,申请量超过总数时,将打印错误信息并退出
     self->Status.Type = 'blocked'; //只要u<n, 就不分配,进程阻塞
     self->Status.List = r;//point to block list 注意:此时block list 是n个 r
     remove(RL, self);// remove self from the ready list,因为运行进程位于绪队列首部,所以此时将它从就绪队列移除
     insert(r->Waiting_List, self);// 将进程self插入到资源r的等待队列尾部
     Scheduler(); 
}
}

 情况二:一类资源有多个的情况(multi_unit)

Request(rid, n) // n为请求资源数量
{
   r = Get_RCB(rid);
   if (u ≥ n) // u为r->Status.u, 即可用资源数量,参资源数据结构图
{
      u-n;
      insert(self->Other_Resources, r, n);//self 为当前请求资源的进程PCB,insert以后n 个r为self进程占有的资源, 参PCB结构图
   } 
else 
{
  if (n>k) exit;//k为资源r的总数,申请量超过总数时,将打印错误信息并退出
     self->Status.Type = 'blocked'; //只要u<n, 就不分配,进程阻塞
     self->Status.List = r;//point to block list 注意:此时block list 是n个 r
     remove(RL, self);// remove self from the ready list,因为运行进程位于绪队列首部,所以此时将它从就绪队列移除
     insert(r->Waiting_List, self);// 将进程self插入到资源r的等待队列尾部
     Scheduler(); 
}
}

5.4.3释放资源
 情况一:一类资源只有1个的情况

Release(rid) 
{
   r = Get_RCB(rid);
   remove(self->Other_Resources, r);//将r从进程self占用的资源中移走
   if (r->Waiting_List == NIL) //没有进程在等待资源r
{
     r->Status = 'free';
   } 
else 
{ 
     remove(r->Waiting_List, q);//q为waiting_list中第一个阻塞进程
     q->Status.Type = 'ready';
     q->Status.List = RL;//就绪队列
insert(q->Other_Resources, r);  
insert(RL, q); //q插入就绪队列中相应优先级队列的末尾
Scheduler(); 
}
}

 情况二:一类资源有多个的情况

Release(rid,n) //rid为资源ID,n为释放的资源数量
{
r = Get_RCB(rid);

/*remove r from self->other_resources, and u= u + n,将资源r从当前进程占用的资源列表里移除,并且资源r的可用数量从u变为u+n*/
remove(self->Other_Resources, r, n);

/*如果阻塞队列不为空, 且阻塞队列首部进程需求的资源数req小于等于可用资源数量u,则唤醒这个阻塞进程,放入就绪队列*/
while (r->Waiting_List != NIL && u>=req_num) 
{
     u=u- req_num; //可用资源数量减少
     remove(r->Waiting_List, q); // 从资源r的阻塞队列中移除
     q->Status.Type = 'ready';
     q->Status.List = RL;
     insert(q->Other_Resources, r); //插入r到q所占用的资源中
 insert(RL, q); // 插入q到就绪队列
}
 Scheduler(); //基于优先级的抢占式调度策略,因此当有进程获得资源时,需要查看当前的优先级情况并进行调度

}

5.5 进程调度与时钟中断设计

调度策略
 基于3个优先级别的调度:2,1,0
 使用基于优先级的抢占式调度策略,在同一优先级内使用时间片轮转(RR)
 基于函数调用来模拟时间共享
 初始进程(Init process)具有双重作用:
虚设的进程:具有最低的优先级,永远不会被阻塞
进程树的根

Scheduler:
Called at the end of every kernel call

Scheduler() {
      find highest priority process p 
      if (self->priority < p->priority ||
          self->Status.Type != 'running' ||
     self == NIL) 
     preempt(p, self)//在条件(3)(4)(5)下抢占当前进程
}

Condition (3): called from create or release, 即新创建进程的优先级或
资源释放后唤醒进程的优先级高于当前进程优先级
Condition (4): called from request or time-out, 即请求资源使得当前运行进程阻塞或者时钟中断使得当前运行进程变成就绪
Condition (5): called from destroy,进程销毁
Preemption: //抢占,将P变为执行,输出当前运行进程的名称
• Change status of p to running (status of self already changed to ready/blocked)
• Context switch—output name of running process

 时钟中断(Time out):模拟时间片到或者外部硬件中断

Time_out() 
{
    find running process q; //当前运行进程q
    remove(RL, q);// remove from head? yes
    q->Status.Type = 'ready';
    insert(RL, q);// insert into tail? yes
    Scheduler();
}

5.6 系统初始化设计

启动时初始化管理器:
具有3个优先级的就绪队列RL初始化;
Init进程;
4类资源,R1,R2,R3,R4,每类资源Ri有i个

5.7 测试示例

输入测试命令或将测试命令放在测试文件input.txt中,内容为:
cr x 1
cr p 1
cr q 1
cr r 1
to
req R2 1
to
req R3 3
to
req R4 3
to
to
req R3 1
req R4 2
req R2 2
to
de q
to
to

输出结果应为:init x x x x p p q q r r x p q r x x x p x

转载注明地址:http://blog.youkuaiyun.com/springcoder/article/details/72047344

下一篇 电子科技大学—操作系统课程实验(二)

杭州电子科技大学操作系统课程设计:简单文件系统的实现 本实验的代码地址:https://github.com/yjc567/HDU_OS_Assignment_2017_SimpleFileSystem,如有需要,欢迎自行取用,但是不建议你拿着这个代码去验收,自己的知识永远是自己的,好好学习才是王道! emmmm想写一个操作系统的课程设计说明,因为自己写的时候也遇到了好多问题,外加感觉对实验指导书的说明有些疑问,觉得写出来可以给别人看看。但是感觉写出来 阅读详情

相关推荐

电子科技大学---操作系统课程实验(二)

前一篇文章贴出的是基本的实验思路以及要求,接下来我们用代码具体实现整个进程管理过程。 由于本人比较喜欢用java开发,并且java写起来比c快多了,于是就写了一个java版的。思想都是一样的,语言不重要系统目录:整个系统主要是三个java代码文件:![这里写图片描述](http://img.blog.youkuaiyun.com/20170514183939198?watermark/2/text/aHR0cD

springcoder的博客 4371

操作系统实验之进程管理

新来的进程加到就绪队列末尾。定义PCB类和队列类,利用队列先进先出的特点,实现进程在就绪队列、运行队列、阻塞队列之间的切换,同时状态进行改变。2. 采用“时间片轮转”调度算法对5个进程进行调度,每个进程有一个进程控制块PCB,进程控制块可包含以下信息:进程名、到达时间、需要运行的时间(以时间片为单位)、已用cpu时间(以时间片为单位)、进程状态等等。在阻塞队列里由于进程阻塞,所有未能获得CPU的使用权,当满足一定的条件时,进程状态改变,从阻塞队列中退出,进入就绪队列中等待PCB的调度,如此往复。

qq_64377514的博客 4570

西安电子科技大学操作系统深入教学课件与实验指导

操作系统是计算机系统的核心软件,负责管理计算机硬件与软件资源,为应用软件提供支持,它涉及用户接口、内存管理、文件系统、设备驱动等众多方面。操作系统的定义是:它是计算机硬件与应用程序之间的接口,是管理和控制计算机资源的软件系统。其核心功能包括处理器管理、内存管理、设备管理和文件系统管理。进程是操作系统中的一个核心概念,它代表了一个在内存中运行的程序的实例,包含了一组指令、数据以及它们的运行状态。每个进程都有自己的地址空间、系统资源的分配和进程控制块(PCB)。

weixin_42453228的博客 644

电子科技大学-操作系统实验课-遇到的问题以及查找的知识总结

在windows下的各种IDE可以帮助自动运行代码,但是到了linux环境下,需要使用Makefile文件来自动编译代码,一旦整个项目的Makefile都写好了以后,只需要一个简单的make命令,就可以实现自动编译了。当然,准确的说,是make这个命令工具帮助我们实现了我们想要做的事,而Makefile就相当于是一个规则文件,make程序会按照Makefile所指定的规则,去判断哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译obj-m。

weixin_37490132的博客 1885

操作系统实验源码项目实战

在探讨操作系统实验的核心内容之前,理解实验的目标和基本流程是至关重要的。本章将简要介绍操作系统实验的目的、意义以及实验中将要使用的工具和方法,为后面深入的章节内容打下坚实的基础。操作系统实验不仅是对操作系统理论的验证和实践,也是对计算机系统深层次理解的开始。通过这些实验,学习者能够更直观地观察操作系统的工作原理,掌握系统资源管理和进程调度等核心概念。接下来,我们将通过介绍实验中常见的操作系统特性,包括进程管理、线程同步、进程间通信以及C语言在操作系统实验中的应用等,来逐步展开我们的学习之旅。

weixin_42097508的博客 930

电子科技大学操作系统课程PPT精讲

操作系统是计算机硬件与软件资源的管理者,也是用户与计算机之间沟通的桥梁。其核心功能包括处理程序执行、管理用户任务、控制数据存取等,确保计算机系统的高效、稳定运行。操作系统定义为一组能够管理计算机硬件资源的系统软件。其功能不仅限于资源管理,还涉及内存管理、文件系统管理、设备管理以及安全保护等多个方面。它通过提供接口,使得应用程序能够更好地利用计算机资源,同时为用户提供方便的操作环境。随着技术的发展,现代操作系统还强调了多媒体处理、网络支持和图形用户界面等高级功能。

weixin_35995661的博客 433

操作系统实验 电子科技大学

【代码】操作系统实验。

weixin_66430194的博客 1119

电子科技大学计算机学院操作系统实验报告

(一) 总体设计 系统总体架构如图1所示,最右边部分为进程与资源管理器,属于操作系统内核的功能。要求能够设计与实现一个简单的进程与资源管理器,具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。 图1 系统总体结构 (二) Test shell设计 应具有的功能: 1、从终端或者测试文件读取命令; 2、将用户需求转换成调度内核函数(即调度进程和资源管理器); 3、在终端或输出文件中显示结果:如当前运行的进程、错误信息等。 (三) 进程管理设计 1、进程状态与操作 2、进程控制块结构PCB 3、主要函数:创建进程、撤销进程 (四) 资源管理设计 1、主要数据结构RCB 2、请求资源 3、释放资源 (五)进程调度与时钟中断设计 关键:使用基于优先级的抢占式调度策略,在同一优先级内使用时间片轮转算法。

电子科技大学课程《操作系统原理与实践》(持续更新)

电子科技大学2022本科操作系统的上课笔记和知识点总结,以及题目考核答案和解析,重点已标记

qq_73509351的博客 2654

电子科技大学操作系统实验1-进程与资源管理实验.pdf

实验结果:全部通过所给的10个测试序列 实验内容:在实验室提供的软硬件环境中,设计并实现一个基本的进程与资源管理器。 该管理器能够完成进程的控制,如进程创建与撤销、进程的状态转换;能够基于 优先级调度算法完成进程的调度,模拟 时钟中断,在同优先级进程中采用时间片 轮转调度算法进行调度;能够完成资源的分配与释放,并完成进程之间的同步。 该管理器同时也能完成从用户终端或 者指定文件读取用户命令,通过 Test shell 模块完成对用户命令的解释,将用户命令转化为对进程与资源控制的具体操作, 并将执行结果输出到终端或指定文件中。

计算机系统结构实验报告.pdf

该文档为pdf,帮助后辈们更加理清实验内容。希望不要抄袭,是电子科技大学计算机学院计算机系统结构实验报告,里面包含对流水线CPU的仿真,解决数据冒险和控制冒险,实验得分为99分

【免费下载】 西电计科大二下课程实验汇总:一站式学习资源库

“西电计科大二下课程实验汇总”是一个专为西安电子科技大学计算机科学与技术专业大二下学期学生设计的开源项目。该项目旨在为学生提供一个集中的资源库,涵盖了电子线路实验一、操作系统实验、计算机网络实验以及计算机组织与体系结构实验的全部实验资料。无论是实验指导书、实验代码、实验环境配置说明,还是实验报告模板,这里都一应俱全。通过这个项目,学生们可以轻松获取所需的实验资源,提高实验效率,更好地掌握课程内容。

gitblog_09718的博客 2402

电子科技大学计算机操作系统实验代码(代码+截图).zip

电子科技大学计算机操作系统实验源代码和截图,保证可以运行,开发环境VS 2013

电子科技大学信软学院数据库 操作系统 计算机网络复习笔记汇总

年前收集的一些资料。欢迎交流。我困惑一个问题,既然期末明明可以花费三天时间突击,然后拿到大部分甚至不错的分数,那为什么不从开学就直接看复习笔记,就从前辈的学期末尾出发开始本学期?前几天的一个项目收尾了,今天忙里偷闲整理时发现了自己这篇文档,发布出来。

qq_73665246的博客 3289

计算机操作系统实验报告.docx

该文档包含电子科技大学计算机学院操作系统课程的实验,分别为模拟资源管理和内存地址转化实验,时间为2019年5月

电子科技大学码图代码题答案

尼电码图代码题答案,史上最全

不正经的保姆级西电软工操作系统实验课教程 ==== 专题一

*************** 看前须知 *********** 1.本文仅仅是西电软件工程OS实验课的教程,原则上只接受关于本实验相关的问题 2.代码原则上仅仅作为参考,如果被查出因为抄袭而导致不良的后果,本人不负任何责任。 3.文章中的代码是经过整合而得到的,如有侵权,请及时联系 4.关于实验系统 本人使用的是Ubuntu 20.04 linux内核最低5.4.x vmware 15.x 5.接上条,如果你按照了这个配置还是出现了问题,那么可以at我 ========================

hhhdafahao的博客 4336

【任何电机可使用的七段式s曲线-----包括matlab代码和simulink仿真】

S形加加速(T1)→>匀加速(T2)→减加速(T3)→>匀速(T4 )>加减速(T5)>匀减速(T6)-→>减减速(T7)

weixin_44312889的博客 6309

电子科技大学操作系统实验2-地址映射实验

电子科技大学操作系统实验2-地址映射实验 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了《电子科技大学操作系统实验2-地址映射实验》的详细资源文件,以下是该文件的详细介绍: 实验内容 编写实验使用的示例程序,以加深对地址映射的理解。 理解X86计算机的寻址机制,包括全局描述符表GDT、局部描述符表等数据结构的内容。 查看GDTR、LDTR、DS等寄存器,了解寄存器...

gitblog_06732的博客 811

用PY32F003F18的PWM互补输出驱动无刷电机,保姆级配置流程(含代码)

本文详细介绍了如何利用PY32F003F18微控制器的TIM1定时器配置PWM互补输出功能来驱动三相无刷电机,涵盖硬件设计、代码实现及六步换相算法。通过保姆级配置流程和实用代码示例,帮助开发者快速掌握无刷电机驱动技术,适用于工业自动化和消费电子等领域。

weixin_26905487的博客 378

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 646
上一篇: 自定义控件实现点状进度条
下一篇: 电子科技大学---操作系统课程实验(二)
木槿花雨
博客等级 码龄11年 20粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值