模拟进程创建、终止、阻塞、唤醒原语操作系统原理


    





    操作系统原理




    题 目:模拟进程创建终止阻塞唤醒原语
    院 (部): 理工程学院
    专 业: 信息理信息系统
    班 级: 信
    姓 名:
    学 号:







    实验题目:模拟进程创建终止阻塞唤醒原语
    题目类型:必做题目
    二实验目:通设计调试创建终止阻塞唤醒原语功助操作系统中进程控制功理解掌握操作系统模块设计方法工作原理
    三实验环境:
    1硬件:pc机兼容机
    2软件:Windows OSTurbo CC++VC++VSnetJava等
    四实验容:
    1设计创建终止阻塞唤醒原语功函数
    2设计函数采菜单结构(参见面出流程图)
    3设计显示队列函数目绪阻塞队列中进程信息显示屏幕供时查队列中进程变化情况
    五算法流程图
    开始


    系统菜单
    1…创建
    2…阻塞
    3…唤醒
    4…终止
    5…显示
    0…退出
    请输入您需功(0-5):

    输入选择?


    5
    4
    3
    2
    1
    0


    退出
    创建
    阻塞
    唤醒
    终止
    显示


    结束


    六程序清单
    #include
    #include
    struct pcb
    {
    char name[10]
    int status
    int order
    int time
    int wtime
    int ytime
    }pcb[11]该结构体存储已输入进程
    struct ghost
    {
    char name[10]
    int status
    int order
    int time
    }ghost[11]该结构体优先级调度时进程优先级排序
    char a_name[10]
    int i0ya0xzjilu
    void insert()
    void block()
    void rouse()
    void stop()
    void outPut()
    void control()实验二添加函数
    void order_control()实验二添加函数
    void time_control()实验二添加函数
    void insert()
    {
    jilu0jilu判断变量重复时进行判断跳
    if(i>10)
    printf(进程已存10法继续添加进程\n)
    else
    {
    printf(请输入插入pcb数\n)
    printf(1进程名)
    scanf(s&pcb[i]name)
    printf(2该进程优先级(110))
    scanf(d&pcb[i]order)
    printf(3运行时间)
    scanf(d&pcb[i]time)

    for(y0y {
    if (strcmp(pcb[i]namepcb[y]name)0)
    {
    printf(您输入进程名已存请重新输入\n)
    jiluy+1
    }

    }
    if(jilu>0)jilu0
    else
    {
    printf(输入已完成\n您输入数\n进程名 s\n优先级 d\n运行时间 d\npcb[i]namepcb[i]orderpcb[i]time)
    printf(\n)
    strcpy(ghost[i]namepcb[i]name)
    ghost[i]orderpcb[i]order
    ghost[i]timepcb[i]time
    pcb[i]status1
    ghost[i]status1
    pcb[i]wtimepcb[i]time
    pcb[i]ytime0
    i++
    }
    }
    }
    void block()
    {
    int m
    printf(\n请输入您改变状态进程进程名 )
    scanf(s&a_name)
    for(y0y {
    if(strcmp(pcb[y]namea_name)0)
    {
    a1
    if(pcb[y]status0)
    {
    printf(您修改进程已阻塞状态法更改\n)

    }
    if(pcb[y]status2)
    {
    pcb[y]status0
    for(m0m {
    if(strcmp(ghost[m]namea_name)0)
    {
    ghost[m]status0
    }
    }
    printf(操作已完成进程成功改阻塞状态\n)

    }
    }
    }
    if(a0)
    {
    printf(起您查找进程名存\n)
    }
    a0
    }
    void rouse()
    {
    int m
    printf(\n请输入您改变状态进程进程名 )
    scanf(s&a_name)
    for(y0y {
    if(strcmp(pcb[y]namea_name)0)
    {
    a1
    if(pcb[y]status1)
    {
    printf(您修改进程已绪状态法更改\n)
    break
    }
    if(pcb[y]status0)
    {
    pcb[y]status1
    for(m0m {
    if(strcmp(ghost[m]namea_name)0)
    {
    ghost[m]status1
    }
    }
    printf(操作已完成进程成功改运行状态\n)
    break
    }
    }
    }
    if(a0)
    {
    printf(起您查找进程名存\n)
    }
    a0
    }
    void stop()
    {
    printf(\n请输入您改变状态进程进程名 )
    scanf(s&a_name)
    for(y0y {
    if(strcmp(pcb[y]namea_name)0)
    {
    a1
    for(y {
    pcb[y]pcb[y+1]
    }
    i
    printf(操作已完成进程成功删\n)
    break
    }
    }
    if(a0)
    {
    printf(起您查找进程名存\n)
    }
    a0
    }
    void outPut()
    {
    if(i0)
    {
    printf(起没进程存法显示\n)
    }
    else
    {
    printf(\n\n 已存进程分(状态2表示正运行1表示绪0表示阻塞)\n)
    for(y0y {
    if(pcb[y]status3)printf(进程d 进程名 s 状态 d\ny+1pcb[y]namepcb[y]status)
    }
    }
    }
    void control()
    {
    for(1)
    {
    printf(进程调度子菜单\n0 返回菜单\n1 优先级调度\n2 时间片轮转调度\n请输入您想进行操作指令 : )
    scanf(d&x)
    if(x0)
    break
    switch(x)
    {
    case 0
    break
    case 1
    order_control()
    break
    case 2
    time_control()
    break
    default
    printf(您输入指令误请重新输入\n)
    break
    }
    }
    }
    void order_control()
    {
    int jishiCPU运行时间计时
    jishi0
    char panduan1panduan2判断否继续调度
    struct ghost jiaohuan
    int ggbl
    for(gg0gg {
    if(pcb[gg]status2)
    {
    for(bl0bl {
    if(strcmp(ghost[bl]namepcb[gg]name)0)
    {
    ghost[bl]status2
    }
    }
    }
    }
    for(x0x {
    for(yx+1y {
    if(ghost[x]order {
    jiaohuanghost[x]
    ghost[x]ghost[y]
    ghost[y]jiaohuan
    }
    }
    }语句根优先级进程排序
    printf(\n\n优先级调度进程具体容\n)
    for(x0x {
    if(ghost[x]status1){

    printf(正运行进程 s\n优先级 d\n运行时间 d\n\n\nghost[x]nameghost[x]orderghost[x]time)

    for(y0y {
    if(strcmp(pcb[y]nameghost[x]name)0)
    {
    pcb[y]status2
    ghost[x]status2
    }
    }该语句更改结构体进程状态
    printf(否继续运行直进程运行完毕(YN))
    scanf(s&panduan1)
    if(panduan1'Y'||panduan1'y')
    {
    if(ghost[x]status2)
    {
    jishijishi+ghost[x]time
    printf(CPU运行时间 d 进程 s 运行完毕正关闭\njishighost[x]name)
    for(y0y {
    if(strcmp(pcb[y]nameghost[x]name)0)
    {
    pcb[y]status3
    ghost[x]status3
    }
    }该语句更改结构体进程状态
    if(x(i1))
    {
    printf(进程全部运行完毕\n\n)
    }
    else{
    printf(\n否继续调度(yn))
    scanf(s&panduan2)
    if(panduan2'N'||panduan2'n')break}
    }}else break
    }
    }printf(果输出容请检查绪队列否存进程)
    }
    void time_control()
    {
    int zkz1kz2kz3kz4kz5kz6kz1表示时间片运行时间计时kz2表示CPU运行总时间kz3进程时间输出kz4表示已完成进程数kz5表示状态绪进程数kz6更改ghost状态值
    z0kz20kz40kz50
    for(y0y {
    if(pcb[y]status1)
    {
    kz5kz5+1
    }
    }
    printf(\n\n请输入时间片长度 )
    scanf(d&x)
    printf(\n\n时间片轮转调度进程具体容\n)
    if(kz50)
    {
    for(kz4 {
    for(y0y {
    if(pcb[y]status1||pcb[y]status2)
    {
    for(kz10kz1 {
    if(pcb[y]status1||pcb[y]status2){
    kz2kz2+1
    pcb[y]wtimepcb[y]wtime1
    pcb[y]ytimepcb[y]ytime+1
    printf(CPU运行时间 d 正运行进程 s\nkz2pcb[y]name)
    printf(进程名 已运行时间 未运行时间 求运行时间\n)
    for(kz30kz3 {
    if(pcb[kz3]status1||pcb[kz3]status2)
    {
    printf(s12d12d12d\npcb[kz3]namepcb[kz3]ytimepcb[kz3]wtimepcb[kz3]time)
    }
    }
    if(pcb[y]wtime<0&&pcb[y]status3)
    {
    printf(进程 s 运行完毕正关闭\n\npcb[y]name)
    kz4kz4+1
    pcb[y]status3
    for(kz60kz6 {
    if(strcmp(ghost[kz6]namepcb[y]name)0)
    {
    ghost[kz6]status3
    }
    }
    kz1x
    break
    }
    printf(\n)
    }}
    }
    }
    }
    }
    printf(注意:果未输出程请检查绪列表否存进程\n)
    }
    void main()
    {
    char c
    for(1)
    {
    printf(系统菜单\n)
    printf(1创建\n)
    printf(2阻塞\n)
    printf(3唤醒\n)
    printf(4终止\n )
    printf(5显示\n)
    printf(6调度\n)
    printf(0退出\n)
    printf(请输入操作指令 )
    if(scanf(d&x))
    {
    if(x0)
    break
    switch(x)
    {
    case 1
    insert()
    break
    case 2
    block()
    break
    case 3
    rouse()
    break
    case 4
    stop()
    break
    case 5
    outPut()
    break
    case 6
    control()
    break
    case 0
    break
    default
    printf(格式非法请重新输入\n)
    break
    }
    }
    else if(scanf(c&c))
    {
    printf(格式非法请重新输入\n)
    }
    }
    }
    七程序中数结构符号说明
    struct pcb
    {
    char name[10]
    int status
    int order
    int time
    int wtime
    int ytime
    }pcb[11]该结构体存储已输入进程
    struct ghost
    {
    char name[10]
    int status
    int order
    int time
    }ghost[11]该结构体优先级调度时进程优先级排序
    void insert()添加进程
    void block()阻塞进程
    void rouse()唤醒进程
    void stop()删进程
    void outPut()输出
    void control()实验二添加函数
    void order_control()实验二添加函数
    void time_control()实验二添加函数
    八调试程序时出现问题解决方法
    问题:
    现象:阻塞功输出功法正常显示进程状态
    解决:进程结构体中添加控制进程状态变量
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    操作系统课外实践报告Linux进程管理

    操作系统课外实践报告项 目 名 称: Linux 进程管理 所 在 班 级: 软件工程(10.Ne...

    1年前   
    317    0

    操作系统进程管理实验报告

    操作系统进程管理实验报告实验一 进程管理1.实验目的:(1)加深对进程概念的理解,明确进程和程序的区别;(2)进一步认识并发执行的实质;(3)分析进程争用资源的现象,学习解决进程互斥的方法;...

    1年前   
    356    0

    操作系统精髓与设计原理课后答案

    操作系统精髓与设计原理课后答案 第1章 计算机系统概述 1.1 列出并简要地定义计算机的四个主要组成部分。 主存储器,存储数据和程序;算术逻辑单元,能处理二进制数据;控制单元,解读...

    5年前   
    1476    0

    进程调度算法的实现计算机操作系统课程设计

    题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,...

    3年前   
    582    0

    唤醒心灵

    唤醒心灵——谈品德后进生的自我教育曾经在一本杂志上看到过这么一则触目惊心的报道:我国现有在校后进生人数超过5000万,相当于一个法国、十个瑞士的人口。这一惊人的数字不禁让我反思现在的教育现状:...

    10年前   
    512    0

    交通阻塞

    交通阻塞交通阻塞道具:比参加人数多一个塑胶地垫说明:1、将塑胶地垫呈一字型在地上铺开,让学员全部站在地垫上,留中间一个地垫不站人;2、学员分成两边相对而站,通过中间的空格进行移动,3、移动的方...

    11年前   
    371    0

    操作系统课程设计银行家算法的模拟实现

    操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进...

    3年前   
    684    0

    机械原理模拟题

    机械原理模拟题01一、选择题(共20分.每题2分)1.一般门与门框之间有两个铰链.这应为(C)。A复合铰链B 局部自由度 C 虚约束2.某机构中有6个构件.则该机构的全部瞬心的数目为(D)。A...

    1年前   
    311    0

    唤醒“沉睡”的教师

     唤醒“沉睡”的教师      作者简介:王海彦,37岁,内蒙古民族师范学院毕业,大学本科,中学高级教师,内蒙古毕拉河林业局中学副校长,内蒙古森工集团骨干教师,英语学科带头人,多年来一直工作在...

    10年前   
    423    0

    备战操作系统

    操作系统 操作系统概念:操作系统是控制其他程序运行,管理资源并为用户提供操作界面的系统软件的集合。 操作系统的功能有:处理机管理、存储管理、外围设备管理(又称I/0设备管理)、文件管理和操...

    9年前   
    7528    0

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)实验三 进程调度一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处...

    3年前   
    642    0

    交通阻塞应急处置预案

      为规范公路交通阻断的应急处理工作,落实信息报送工作,提高公路交通应急保障和公共服务能力,特成立应急领导小组名单,制定交通阻塞应急处置预案领导小组如下: 组  长:*** 副组长:**...

    14年前   
    15949    0

    毕业实习进程安排

    毕业实习进程安排  为进一步加强毕业实习管理工作,根据学院统一部署,现就管理系电子商务、公共事业管理专  业专科毕业实习计划安排如下:  一、XX-XX学年度第一学期   1、第4周前 完成提...

    9年前   
    670    0

    测量实习进程记录

    测量实习进程记录  时间  组长  赵宗元  组别  第八组  组员  张雪、张震、周伟平、朱文超  7月11日  全体组员到实验室领取测量实习所需要的仪器。  在领取完仪器后,全体组员参与对...

    10年前   
    649    0

    ccs总体进程

    2006年2月ccs总体进程工作项目12345678910111213141516171819202122232425262728大纲设计收集资料

    9年前   
    499    0

    恒星演化进程

    人类世世代代生活在地球上,千百年来人们一直在思索,我们从何而来,我们为什么存在。随着科技水平的不断发展,人类对于我们这个世界的认识也越来越深刻,越来越清晰。现在我们已经知道,我们生存的地球围绕着...

    4年前   
    1042    0

    操作系统习题及答案

    操作系统习题与答案(经典型)第一章 引言(一)单项选择题1操作系统是计算机系统的一种( B )。A.应用软件 B.系统软件 c.通用软件 D.工具软件2.操作系统目的是提供一个供其他程序...

    3年前   
    803    0

    高级操作系统试题

    高级操作系统试题2.请求驱动式令牌传递方法中,若pi发出request消息后久未获得Token,该怎么处理?若引 入时戳,该算法应做何修改?答:在请求驱动式令牌传递方法中,或pi发出的requ...

    4年前   
    900    0

    《操作系统》在线作业

    《操作系统》在线作业

    4年前   
    3329    0

    操作系统实验心得

    操作系统实验心得  每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在...

    12年前   
    982    0

    文档贡献者

    文***品

    贡献于2020-12-21

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档