0604学习总结(进程,多进程,线程)

来源:互联网 发布:linux下不保存退出 编辑:程序博客网 时间:2024/06/17 16:57
一.进程:程序开始到结束
1.main函数如何调用
main函数就是程序的入口地址,没有os时,先由汇编写出引导代码,有os时,也就是有引导代码时,由os提供。在同一os中,所有引导代码都一样。
正常结束:return exit -exit

非正常结束:自己或者别的进程发送终止信号


二.进程的环境
1.环境变量
操作系统中的全局变量,所以程序都可以进行访问
export,查看环境变量
2.每一个进程中都有一份所以环境变量的表格
当前进程中可以直接使用的这些环境变量-》environ变量指向字符串数组
3.获得环境变量的方法
getnev

clearenv 删除当前系统中的环境变量


三.进程进行的虚拟地址空间
每个进程都在独立的空间中运行,彼此互不干扰也互不看见
意义:
1.进程隔离:让进程之间彼此看不见--》安全性
2.提供多进程的运行:可以再动态运行时可以装软件
四.进程的引入
1.进程是动态的
2.进程是程序的一次执行过程
可以执行的程序每执行一次,就是一次进程
进程模块:PCB
内核中专门用来管理进程的一个数据结构。
进程控制块里面包含包含这个进程的各个记录。
进程id号:就是一个数字,相当于操作系统给这个进程分配的一个数字编号,来唯一的标识进程。
结果分析:
1.进程id号从1开始,0号进程为内核进程,

2.有的进程是连续的,有的进程存在时间很短,消亡后再分配就会跳过


五.如何获得进程
getpid:获得当前进程号

getppid:获得当前进程的父进程


六.多进程调用原理

操作系统的复制性就是多进程引起的——》操作系统设计复杂就是为了多线程


七.os中进程的调度原理
1.‘先来先运行’
2.时间片轮询
3.短任务优先执行
4.优先级调度

5.其他调度算法


八.小结
1.虽然子进程创立后,父子进程就变成了独立的个体,但还是有联系的。
2.父进程在没有fork之前所做的事情对子进程影响很大。但在fork之后在自己的if语句中无影响。

3.子进程的目的使,独立的运行另处的程序。


九.进程的消亡与诞生
消亡:需要处理
进程运行时要消耗资源:内存

内存是进程os申请的,消亡时资源释放,不回收资源,容易造成资源泄漏。


十.僵尸进程和孤儿进程
僵尸进程:子进程比父进程先结束【谁创建谁回收】
1.向os申请的资源【os回收】
2.进程本身的资源【父进程回收】
清理内容:task-struct和栈内存
手段:wait和waitpid

孤儿进程:父进程比子进程先结束
linux:中孤儿进程变成特殊进程(init 1号进程)的字进程
父进程回收子进程:wait waitpid
工作原理:
1.子进程结束时,系统会向父进程发个信号:
2.父进程调用wait函数后阻塞
3.父进程被信号唤醒,然后回收僵尸进程

4.如果父进程没有任何子进程则wait返回错误


十一.wait 和 waitpid
基本功能相同,waitpid可以回收指定的pid的子进程,wait可以接收任何id的子进程。
waitpid可以采用2种模式阻塞和非阻塞。

wait是阻塞的。


十二.exec函数族
父子进程中的执行的是执行代码,代码太长不好控制,无法执行一些命令。

引入exec函数族,通过exec可以执行可执行文件


十三.system函数
system = fork + exec
好处:不会打断,不会引来竞争关系

坏处:占用太对cpu,影响别的进程的执行


十四.进程的状态
1.就绪态
2.执行态
3.僵尸态
4.等待态

4.暂停态


十五.守护进程
daemon:后面加.d,基本上就是守护进程
特点:
1.长期运行

2.与控制台脱离,一般进程与控制台绑定


十六.进程间通信

很少用,开销大


十七.管道

管道和有名管道,默认为无名管道。
管道通信:
单双工:
数据流动只能从一端到另一端
半双工:
一会从这端到另一端,一会从另一端到这段(潮汐车道)
全双工:
双向流动
有名管道:
使用makefilo创建的,然后再两个进程分别用open打开获得fd,一个读一个写,通过文件名将两个联系在一起。

共享内存:

消息队列;

克服管道只能传输无格式的字节流。本质就是链表。


十八.线程
简介:
1.是一个轻量级的线程,脱胎于进程,都可以参与操作系统的调用
2.参与操作系统调用的最小单元,也就是os调用其实是线程
与进程的关系:
1.进程中可以有很多线程
2.如果进程消亡,进程中的线程也会消亡
3.线程消亡,不影响进程以及进程中的其他线程
为什么要有线程?
通信效率高
原创粉丝点击