- 博客(22)
- 收藏
- 关注
原创 进程终止与进程等待
子进程在退出的时候,要修改状态Z,再将子进程的退出信号和退出码写入到子进程的pcb的exit_code,exit_signal中,父进程再用*statusp去获取退出信息。子进程在修改全局变量时发生写时拷贝,父进程是读不到子进程它自己的全局变量的,进程具有独立性,父进程无法直接获取子进程的退出信息。b.子进程是要为父进程完成任务,子进程将任务完成的如何,需要进程等待的方式,获取子进程退出的信息-非阻塞等待,往往要进行重复调用,轮询+非阻塞进行进程等待 优点:等待的同时,可以做自己的事情。
2024-06-09 20:18:11 1676
原创 进程创建与进程退出
>那子进程PCB有了,可是子进程不是由磁盘来的,没有可执行程序,那么子进程如何运行呢,所以只能和父进程共享去全部的代码和数据,包括fork之前的代码。父进程可以知道哪个进程是它的子进程,以便后续进行通信、同步或者管理,返回0使得子进程能够判断创建进程成功。fork之后,会有两个不同的返回值,给子进程返回0,给父进程返回子进程的pid。只有父进程执行fork之前的代码,fork之后,父子进程都要执行后续的代码。2.为什么父进程返回子进程的pid,子进程返回0。进程的独立性,首先是表现在各自有各自的PCB。
2024-06-09 20:12:41 431
原创 Linux环境变量讲解
当你在命令行输入一个命令时,操作系统会在环境变量$PATH中定义的目录列表里查找对应的可执行文件。重置下PATH为原始PATH里的内容即可tips:PATH只在内存中做修改,所以每次重启PATH都会重置。
2024-06-06 20:21:46 820
原创 **Linux 内核的调度队列与调度原理**
一个CPU维护了一个run_queue队列,一个run_queue维护两个queue队列,一个队列由一个指针指向,当活跃队列运行完后,通过交换指针的方式,调度后面插入的进程,实现公平的调度。1.当运行队列运行优先级为70的进程时,此时又有多个优先级为60的进程插入时,此时CPU是调度优先级为70的进程还是为60的进程?后来的进程不管优先级高还是低,都会到过期队列中,当活跃队列中的进程全部调度完,此时会交换指针,实现过期队列和活跃队列的互换。
2024-06-03 22:20:51 114
原创 进程的优先级
Linux支持动态优先级调整的,但是我们不能直接去修改PRI,pcb中还存在一个跟优先级相关的变量NI(NICE)值,我们可以通过修改NI值来改变进程优先级 nice命令。我们进程在运行的时候,是会使用CPU的寄存器的(例如函数返回值,程序记数器),进程所产生的数据会临时保存在寄存器中,各个进程在寄存器中形成的临时数据叫做这个。OS调度的时候,较为均衡的使得每一个进程都得到调度,容易导致优先级较低的进程,长时间得不到CPU资源,成了。进程切入时,会先恢复临时数据,再在被切换的代码的位置继续编译。
2024-06-03 22:17:40 322
原创 进程的状态
进程被CPU执行时,进程或多或少会有等待数据的时候,例如 scanf,当数据没有准备就绪时,我们的进程就无法向后执行,此时PCB就需要被链入到设备(例如是需要设备的数据)的等待队列,此时PCB没有在运行队列而是在设备的等待队列中,此时就叫做阻塞状态。D(disk sleep):专门对磁盘做设计的,深度睡眠,当进程向磁盘写入重要数据时,此时内存资源严重不足,OS不会将此状态的进程杀掉。X(dead):OS或父进程读取完Z状态的进程退出信息完后,进程就会处于死亡状态,PCB才会被释放。在运行进程时加个&即可。
2024-05-30 21:48:50 293
原创 进程的内容
进程之间不会相互影响!因为代码是只读的,不会因为父进程被关闭而不进行代码共享。启动一个进程,本质上就是系统中多了一个进程,OS要填充管理进程的PCB的属性,申请内存,保存可执行程序和PCB。proc是一个动态的目录结构,存放着所有存在的进程,目录的名称,进程是以pid命名的。启动进程,本质上就是创建进程,一定是由父进程创建的。是bash 我们命令行启动的进程,都是子进程。进程的独立性,首先是表现在各自有各自的PCB。创建进程时,进程的默认路径就是工作目录。每一个进程,都要有自己的工作目录。
2024-05-29 18:36:02 231
原创 Linux进程
5.Linux中,进程的PCB具体是struct task_struct()a.程序是在磁盘上的,进程是已经被操作系统加载到内存中。1.操作系统内管理着很多进程,一定是对进程先描述再组织。3.对进程的管理,就是对PCB管理,对链表的增删查改。PCB中有很多类似于dlist的双链表,例如运行队列。2.描述进程的结构体对象就叫pcb,也叫进程块。4.PCB是内核数据结构,只存在于内存中。可执行程序+内核数据结构(PCB)
2024-05-27 22:42:07 172
原创 体系结构--
b.程序在运行之前,必须要加载到内存,程序=代码加数据,最总都要由内存交给CPU来执行处理。a.CPU与内存打交道,内存是一个硬件极大的缓存,操作系统会将外设的数据搬运到内存。tips2:CPU这个设备处理数据的速度是非常快的,然后是内存,再是外设(磁盘)类似:校长(依靠数据做决策)->辅导员(做执行)->学生(接受管理指令)tips3:以CPU为中心,距离CPU越近,存储效率越高,造价越高。基于冯诺依曼体系结构的本质就是用极少的钱,做出了效率不错的计算机。管理的本质不是管理人,而是管理数据。
2024-05-26 19:03:37 313
原创 Linux调试 GDB
b.(gdb) l(list) + n 从第几行开始查看 回车显示下一部分。(gdb)n(next) 单过程(不进入函数)F10。(gdb)s(step) 单语句(进入函数) F11。(gdb)r (run) 执行程序或跳到下一断点。(gdb)disable+断点编号 禁用断点。(gdb)enable+断点编号 启用断点。(gdb)b(block)+n 一个断点。(gdb)info+b 查看断点信息。(gdb)d+断点编号 删除断点。(gdb)c 运行到下一个断点。(gdb)p+变量 查看变量。
2024-05-26 16:10:48 294
原创 Git Linux
d.编程实现版本控制器自动化,将我们的内容按照变化来管理的软件,可以提供任何一个你存储的版本。github和gitee都是基于git软件搭建的网站。git commit -m “你对代码的修改描述”a.git是一个软件,即是客户端也是服务器。git status 查看工作区的状态。验证身份(命令在获取仓库地址的地方)将目标文件拷贝到你创建的仓库目录下。git log 查看提交记录。b.git是记录变化的软件。c.分布式软件,去中心化。输入gitee账号 密码。新建仓库并复制仓库地址。点击克隆获取仓库地址。
2024-05-23 23:56:25 259 1
原创 makefile自动化构建代码
makefile自动化构建代码make/makefile:基础make:是一个命令makefile:当前目录下存在的一个具有特定格式的文本文件。
2024-05-22 22:01:11 460 1
原创 编译代码 gcc/g++ gcc(C) C++ g++
李四就相当于软件,而高三学长就相当于编译器中的连接器,学校相当于内存,运行代码,我们的代码被加载到内存之中,去网吧上网,网吧就相当于动态库,软件就要去链接动态库才能生成可执行代码。C源文件->预处理(宏,条件编译,注释,头文件展开)->编译(c语言翻译成汇编)->汇编(变成二进制文件)->链接(形成可执行文件)->可执行程序。静态库 是c/c++或者其他第三方提供的所有方法的集合,被所有程序以拷贝的方法,将所需的代码,拷贝到自己的可执行程序中 静态链接。但是此时网吧关了,李四还想要去上网,他就给他爸爸说。
2024-05-21 21:10:58 391
原创 Linux开发基本工具
e:多文件编辑操作:底行模式输入vs 加 文件名可以分屏操作,无论你打开多少个文件,光标只有一个,光标在哪,表示你在编辑哪个文件 ctrl+ww进行切换。d. 批量化注释 ctrl+v进入视图模式(visual block)j/k上下选中区域 shift+i 输入// 再加esc注释多行。b.vim是一款多模式的编辑器:例如命令模式(esc进入),编辑模式,底行模式,替换模式,视图模式。2.rpm包安装,安装的本质就是把可执行程序拷贝到指定路径下即可(最基本的理解)
2024-05-20 23:02:18 270 1
原创 c语言初阶学者的扫雷(函数,递归,循环,数组)基础知识的综合运用。
c语言初阶知识的利用,提供给初学者扫雷的思路与技巧,每个环节都很细心的讲解
2022-11-26 15:24:45 297 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人