操作系统课设之Linux 进程管理

LINUX系统进程管理 进程是计算机系统中最重要的概念之一,在计算机系统中并行运行着大量的程序,这些程序不可能独占系统的全部资源,而是需要这些程序共享系统资源,所以这些程序在运行时会产生一定的竞争关系。那在这种情况下,系统资源怎么分配?运行程序该如何管理呢?操作系统为了解决这一系列的问题引入了进程的概念,用来作为操作系统分配和管理系统资源的基本单位。所以进程的出现是为了让系统资源的利用更加合理,从而提高系统的运行效率。定义进程,就避免不了提到另一个概念“程序”。 阅读详情
AI摘要

本文介绍了一个关于Linux进程管理的实验,包括进程创建和子进程执行新任务等内容。实验使用了fork()和execlp()等函数,展示了如何在Linux环境下进行进程管理。

前言

课程设计开始了,实验很有意思,写博客总结学到的知识
白嫖容易,创作不易,学到东西才是真
本文原创,创作不易,转载请注明!!!
本文链接
个人博客:https://ronglin.fun/archives/173
PDF链接:见博客网站
优快云: https://blog.youkuaiyun.com/RongLin02/article/details/118308366

为了美观,实验源代码在结尾处,整合版见下
链接:https://pan.baidu.com/s/1rXj1QJGuw-BVc5sQWret9w
提取码:Lin2
操作系统课程设计源代码
本次操作系统课程设计合集
操作系统课设之Windows 进程管理
操作系统课设之Linux 进程管理
操作系统课设之Linux 进程间通信
操作系统课设之Windows 的互斥与同步
操作系统课设之内存管理
操作系统课设之虚拟内存页面置换算法的模拟与实现
操作系统课设之基于信号量机制的并发程序设计
操作系统课设之简单 shell 命令行解释器的设计与实现
仅用于学习,如有侵权,请联系我删除

实验题目

Linux 进程管理

实验目的

通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。

实验内容

学习背景知识,了解Linux下的创建进程的方法。
由于操作系统的平时作业也是用Linux,再加上布置过在Linux下的C语言编程的作业,所以本验证性实验完成较为轻松
Linux环境:
虚拟机:Ubuntu 18.04 LTS;硬盘100G;内存4G;64位;4核心
Linux内核:5.11.8 开发工具:CodeBlocks
Linux虚拟机的安装可以看我这两篇博客:
https://blog.youkuaiyun.com/RongLin02/article/details/114273129
https://blog.youkuaiyun.com/RongLin02/article/details/115419994
原理:
主要涉及到两个函数,一个是fork(),一个是exec()系列函数
fork 会建立一个子进程,父进程继续运行,子进程在同样的位置执行同样的程序。fork()会分别返回两个值给父子进程,fork()返回子进程的 pid给父进程,fork()返回 0给子进程。出错时返回-1。 exec()函数会创建一个新的进程映象置换当前的进程映象。exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件

在操作系统的平时作业中,我还用到了vfork()函数。因为fork()创建的子进程其实是父进程数据的copy,也就是说父子进程的数据并不是共享的,子进程只是父进程的翻版,类似于c语言函数中的传递形式参数,要想数据共享,其实也有很多方法,有些资料书上提到很多CLONE_开头的标志位就是控制哪些东西是父子进程共享的。不过有更简单的vfork()函数,其实本质上是一样的,都是调用内核函数do_fork()。需要注意的是,不论多进程还是多线程,数据一旦共享,会涉及到安全问题,不过vfork()创建子进程之后,父进程就会阻塞,所以就没安全问题了。
本验证实验不涉及到父子进程的数据传递

2-1 进程的创建

在Ubuntu下安装好CodeBlocks,然后用CodeBlocks,创建一个新工程,将指导书的代码copy到main.c文件中,然后编译运行查看结果
多次运行,查看结果
关键代码

    int x;
    srand((unsigned)time(NULL));
    while((x=fork())==-1);
    if (x==0)
    {
        sleep(rand() % 2);
        printf("a");
    }
    else
    {
        sleep(rand() % 3);
        printf("b");
    }
    printf("c");

2-2 子进程执行新任务

新建一个工程,将实例代码copy到main.c下
运行查看结果
关键代码

    pid_t pid;
    /* fork a child process */
    pid = fork();
    if (pid < 0)
    {
        /* error occurred */
        fprintf(stderr, "Fork Failed");
        return 1;
    }
    else if (pid == 0)
    {
        /* 子进程 */
        execlp("/bin/ls","ls",NULL);
    }
    else   /* 父进程 */
    {
        /* 父进程将一直等待,直到子进程运行完毕*/
        wait(NULL);
        printf("Child Complete\n");
    }

实验结果与分析

2-1 进程的创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是几次的运行的结果。
分析结果:
子进程输出a和c,父进程输出b和c,当fork()成功之后,将父进程的代码copy一份给子进程运行,所以说父子进程都会输出c,但是控制台只有一个,父子进程会抢输出,再加上一个随机睡眠函数,所以就会出现不同的输出结果。

2-2 子进程执行新任务

运行结果
在这里插入图片描述
子进程会执行execlp()调用ls命令,输出当前的目录结构,同时父进程因为用了wait(null),会自我阻塞,等待随机一个进程结束,然后再执行。
Wait函数也有两个,一个是wait(),另一个是waitpid(),后者比前者功能更强大。

小结与心得体会

由于操作系统平时作业的关系,我对于Linux系统也比较熟悉了,在Linux系统下的C/C++编程也比较熟悉,故完成本验证实验也很轻松。
平时作业我们曾完成过,Linux虚拟环境的安装,Linux内核的编译,Linux下的C语言的进程与线程编程,Linux下打印进程树。
这些在我的博客主页中都可以搜到
=w=

源代码

2-1 进程的创建

#include <stdio.h>
#include<time.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int x;
    srand((unsigned)time(NULL));
    while((x=fork())==-1);
    if (x==0)
    {
        sleep(rand() % 2);
        printf("a");
    }
    else
    {
        sleep(rand() % 3);
        printf("b");
    }
    printf("c");
    return 0;
}

2-2 子进程执行新任务

#include <sys/types.h>
#include<sys/wait.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
    pid_t pid;
    /* fork a child process */
    pid = fork();
    if (pid < 0)
    {
        /* error occurred */
        fprintf(stderr, "Fork Failed");
        return 1;
    }
    else if (pid == 0)
    {
        /* 子进程 */
        execlp("/bin/ls","ls",NULL);
    }
    else   /* 父进程 */
    {
        /* 父进程将一直等待,直到子进程运行完毕*/
        wait(NULL);
        printf("Child Complete\n");
    }
    return 0;
}


高级操作系统——XV6进程管理 源代码阅读: type.h:用于声明一些数据类型的简化名称,和声明页表指针的数据类型。 param.h:主要用于声明基本的一些常量,包括内核栈大小等。 memlayout.h:主要用于声明一些和内存与地址相关的常量与方法,包括虚拟内存转物理内存的方法以及物理内存转虚拟内存的方法等。 defs.h:声明在之后文件中要用到的函数。 x86.h:让c代码使用特殊的x86汇编的一些函数包括outb等,并声... 阅读详情

相关推荐

操作系统实验三:进程管理

一、实验要求 (1)掌握操作系统中进程的基本概念; (2)掌握 Linux操作系统进程管理基本方法; (3)了解进程并发运行的过程。 二、实验内容 (1)验证实验: ① 启动vi编辑器,并将其调入后台,再调出前台,最后退出vi; ② 启动vi编辑器,并将其调入后台,再将该作业杀死; ③ 启动两个vi编辑器,均调入后台后,查看当前有那些作业正在执行; ④ 列出你在当前系统中的所有进程。指出你在该系统中最早启动的进程是那个,在什么时候启动? ⑤ 列出当前系统中占用CPU时间比例最高的进程; ⑥ 系统内核的进程中

蓝多多的小仓库 8586

html中关于display值以及display:flex弹性布局

display 指定 HTML 元素盒子类型:none: 表示此元素不会被显示。block: 元素将显示为块级元素,前后会带有换行符。Inline:元素会被显示为内联(行内)元素,元素前后没有换行符inline-block: 行内块元素。list-item: 元素会作为列表显示 flex-direction 指定了弹性容器中子元素的排列方式:row(默认值):水平方向排列,起点在左端。row-reverse:反向水平排列,起点在右端。column:纵向垂直排列,起点在上方。column-reverse:反向

lingjiaxiaozila的博客 4674

操作系统课设实战:Linux虚拟机、C语言调度器与GDB避坑指南

操作系统作为计算机专业的核心课程,其课程设计往往要求学生在Linux环境下使用C语言实现进程调度、内存管理等核心机制。这类实践项目不仅考验对理论概念的理解,更依赖对POSIX系统调用、编译工具链和调试工具的实际运用。通过编写一个时间片轮转调度器或生产者消费者模型,学生能够深入理解进程状态转换、同步互斥等原理,同时掌握虚拟机环境配置、Makefile工程组织以及GDB定位段错误等工程技能。无论是VMware中安装Ubuntu,还是处理线程同步问题,课程设计所积累的实操经验都能直接迁移到真实系统开发中。本文围绕

weixin_34168834的博客 264

关于前端position属性和display属性,这篇文章已足够

在我初学前端的时候,对position和display,尤其是flex特别的混乱,故总结一套,希望能帮助到有需要的同学。这里我想特别告诫一下移动端学习web的同学,例如position:relative,web端叫相对定位,意思是这个属性加在一个元素上,这个元素就使用相对定位的规则在ui上去渲染;而不是和移动端那样设置了相对布局,子布局里都按相对布局去排列,和移动前端还是有很大的差别的,只要记住相对定位和相对布局是有区别的。 一、关于position属性 1.1、position:static 默认值,没

岩浆李的游鱼 7444

自制电吉他效果器 DIY PCB(二)电路图分析

自制DIY电吉他效果器 PCB(二)电路图分析 要自制一款效果器,看懂电路图是必须的,即使你已经有了完整的设计电路图,在电路的绘制已久焊接的时候电路知识都会用到。 在效果器电路中,比较简单的是过载失真类效果器的电路。混响延迟等与声相有关的由于电路比较复杂本人也没有尝试过。其他的例如EQ、哇音等等效果器复杂程度依设计各不相同,在能做出过载失真类效果器后,可以自行尝试。 我这里主要为大家介绍失真效果器...

qq_41342525的博客 2万+

当AI换脸遇上内容审核:Facefusion NSFW检测的技术伦理与用户自主权之争

本文探讨了Facefusion开源AI换脸工具中NSFW检测机制的技术伦理困境与用户自主权之争。分析了其多层次防御机制的技术实现与社区规避方法,揭示了开源软件在安全与自由之间的平衡难题,并提出了分层权限设计等社区实践方案。

weixin_29165725的博客 687

Css中,display属性值flex(弹性布局)、grid(网格布局)

display为flex,用来定义一个容器元素为一个弹性容器(flexcontainer),即其子元素(flexitems)也成为弹性项目(flexitems),从而实现弹性布局。设置display为flex时,还可相应设置子元素的一些样式。

害。代码嘛,可不就是敲着玩! 5681

如何使用superpowers

"这个 bug 帮我修一下" → 我会自动走 systematic-debugging → TDD → verify 流程。- "帮我添加一个登录功能" → 我会自动走 brainstorming → plan → TDD → verify 流程。只要任务有 1% 的可能性适用某个技能,我就会先调用它再行动。→ TDD(测试驱动开发)→ verification(验证)→ code review(代码审查)提出需求 → brainstorming(头脑风暴)→ writing-plans(编写计划)

xiaojingjianqiang的博客 611

CSS基础笔记八,display属性详解(变成弹性盒子flex,隐藏none,变成块级元素bolck,变成行内元素inline,变成行内块级元素inlen-bolck)

前瞻:display属性可以设置弹性盒子 flex可以设置元素隐藏 none可以更改元素的属性变成块级 bolck变成行内 inline变成行内块级元素 inlen-bolck补充 让一个元素隐藏的几种方式1,更改属性使其隐藏 display:none 隐藏自己,不保留原来的位置2,bisbility:hidden 隐藏自己,保留原来位置3,opacity :0 背景虚化 虚化到0的时候 自然就隐藏了,隐藏自己 保留原来的位置。

qq_55006020的博客 3964

【Lammps】MS将cif通过msi2lmp.exe转为data文件

在Materials Studio中打开cif文件,在Modules工具行选择Forcite>calculation>Energy中选用cvff力场,点击more,不要运行run,在more中取消勾选calculate automatically,点击calculate,然后叉掉后在file>export导出car文件,同步生成了mdf文件。对于MS中没有的立场,选择之后点calculate会报错,右键选择label,然后根据Forcite选择原子,会发现有力场的有标号,没有力场的MS没有对选择标号。

zhangguoliang624的博客 3673

SpringCloud Alibaba - Seata 实现高可用和异地容灾

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。

CYK_byte的博客 975

CSS常用属性之display属性(六)

display属性在日常使用中会经常用到,但是它的一些特点及作用可能有很多小伙伴都不太清楚,接下来就让我来详细介绍一下吧。

全粘小谭的博客 4513

华为OD技术面真题 - 数据库Mysql - 1

汇总华为OD技术面高频Mysql相同问题,提供详细解答。

qq_45776114的博客 1084

操作系统课设——Linux 进程管理

一、实验目的 通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。 二、实验内容和步骤 (1)任务一:进程的创建 任务要求:编写一段程序,使用系统调用 fork()创建一个子进程。当此程序运行时,在系统中有一个父进程和一个子进程活动。让每一个进程在屏幕上分别显示字符:父进程显示字符“b”;子进程显示字符“a”,另外父子进程都显示字符“c”。 步骤 1:使用 vi 或 gedit 新建一个 fork_demo.c 程序,然后拷贝清单 2-1 中的程序,使用 cc 或者gcc

qq_53581188的博客 2137

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

weixin_43567873的博客 1985

网络系统管理专栏-配套练习+知识点详解

网络系统管理专栏-配套练习+知识点详解

bfq05234214的博客 682

操作系统课设详细解答

操作系统课设详细解答 一、题目一 实验一 Windows 进程管理 二、实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。 (3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程......

rothschild666的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

课程设计 分析linux的内存管理,操作系统原理课程设计-Linux2.6进程管理和内存管理.doc...

操作系统原理课程设计实践报告全套设计加扣 3012250582题 目:Linux2.6进程管理和内存管理姓 名:学 院:信息科技技术学院专 业:计算机科学技术系班 级:计科121学 号:指导教师:姜2015年3月 18 日摘要通过学习Linux2.6系统的进程管理和内存管理,实现进程管理和内存管理的仿真实验。我们使用C#语言,采用面对对象的方式,并设计界面,然后通过代码实现...

weixin_28888459的博客 275

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

操作系统——实验1:熟悉Linux命令及进程管理

熟悉Linux系统及基本命令;熟悉vi编辑器和gcc编译器。 加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的实质;分析进程争用资源的现象,学习解决进程互斥的方法。

阮阮的阮阮的博客 1万+

操作系统课设之Linux 进程间通信

操作系统课程设计 Linux进程通信 Linux消息通信机制

RongLin02的博客 5741

操作系统实验一 Linux基本操作|实验二 进程管理

计算机操作系统 |实验一Linux基本操作 |实验二进程管理

Time木的博客 1万+

操作系统课设之在线文档管理(1)

这是我在慕课网上学习的一个程序。刚好可以拿来当操作系统课设,可以为下周操作系统课设做一个借鉴。 首先,程序主要采用php语言。  当然为了能访问,故可以在自己的电脑装一个小的服务器。 我用的wamperserver 介绍:wamp是windows+apache+mysql+php的简称,一组用来搭建动态网站或者服务器的开源软件,下面为大家介绍wampserver的安装过程。 这里是安装过

lxs2016的博客 528

操作系统课设

操作系统课设前言一、搭建LINUX0.11实验环境1.1.如果没有git,那么先安装git搭建实验环境1.3.编译linux0.11环境1.4.运行1.5.调试二、操作系统的引导2.1修改bootsect.s1.2 修改setup.s三、系统调用3.1 修改sys.h3.2 修改system_call.s3.3 增加系统调用号3.4 实现内核函数四、修改系统引导4.1.修改init/main.c文件4.2.修改kernel/printk.c文件,添加打印功能4.3跟踪进程状态修改fork.c修改sched.

southfor的博客 1565

【Linux系统】全面剖析 Linux 进程管理与 PCB 机制

进程是操作系统的核心概念之一,也是计算机执行任务的基本单位。在现代操作系统中,如何高效地管理和调度众多进程,是系统设计和性能优化的重要课题。Linux作为一个多用户、多任务操作系统,其进程管理实现不仅科学严谨,还高度模块化。本篇文章将深入剖析Linux中的进程管理机制,重点讲解进程控制块(PCB)的结构和作用,帮助读者理解操作系统的运行原理。通过本文的讲解,我们可以清晰地看到,Linux系统中进程的管理是通过PCB(task_struct)这一核心数据结构来实现的。

17的博客 1万+

Linux操作系统进程管理实验

Linux操作系统进程管理实验 去发现同类优质开源项目:https://gitcode.com/ 实验简介 本实验旨在深入理解Linux操作系统的进程管理机制,通过实践操作,学习和掌握进程的概念、状态转换、进程控制以及进程间的通信等关键知识点。Linux作为一款广泛使用的操作系统,其强大的进程管理能力是支撑各种应用高效运行的基础。通过本实验,学生将能够直观地认识到操作系统如何管理和调度进程,增强在...

gitblog_06665的博客 1038

〖 Linux 〗操作系统进程管理精讲(1)

操作系统通过管理进程与线程实现资源高效分配调度,涵盖进程概念、状态、优先级及管理方式等关键内容。

weixin_72040293的博客 1558
上一篇: 操作系统课设之Windows 进程管理
下一篇: 操作系统课设之Linux 进程间通信
榕林子
博客等级 码龄7年 1014粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值