一.进程:程序开始到结束
1.main函数如何调用
main函数就是程序的入口地址,没有os时,先由汇编写出引导代码,有os时,也就是有引导代码时,由os提供。在同一os中,所有引导代码都一样。
正常结束:return exit -exit
1.环境变量
操作系统中的全局变量,所以程序都可以进行访问
export,查看环境变量
2.每一个进程中都有一份所以环境变量的表格
当前进程中可以直接使用的这些环境变量-》environ变量指向字符串数组
3.获得环境变量的方法
getnev
每个进程都在独立的空间中运行,彼此互不干扰也互不看见
意义:
1.进程隔离:让进程之间彼此看不见--》安全性
2.提供多进程的运行:可以再动态运行时可以装软件
四.进程的引入
1.进程是动态的
2.进程是程序的一次执行过程
可以执行的程序每执行一次,就是一次进程
进程模块:PCB
内核中专门用来管理进程的一个数据结构。
进程控制块里面包含包含这个进程的各个记录。
进程id号:就是一个数字,相当于操作系统给这个进程分配的一个数字编号,来唯一的标识进程。
结果分析:
1.进程id号从1开始,0号进程为内核进程,
getpid:获得当前进程号
1.‘先来先运行’
2.时间片轮询
3.短任务优先执行
4.优先级调度
1.虽然子进程创立后,父子进程就变成了独立的个体,但还是有联系的。
2.父进程在没有fork之前所做的事情对子进程影响很大。但在fork之后在自己的if语句中无影响。
消亡:需要处理
进程运行时要消耗资源:内存
僵尸进程:子进程比父进程先结束【谁创建谁回收】
1.向os申请的资源【os回收】
2.进程本身的资源【父进程回收】
清理内容:task-struct和栈内存
手段:wait和waitpid
孤儿进程:父进程比子进程先结束
linux:中孤儿进程变成特殊进程(init 1号进程)的字进程
父进程回收子进程:wait waitpid
工作原理:
1.子进程结束时,系统会向父进程发个信号:
2.父进程调用wait函数后阻塞
3.父进程被信号唤醒,然后回收僵尸进程
基本功能相同,waitpid可以回收指定的pid的子进程,wait可以接收任何id的子进程。
waitpid可以采用2种模式阻塞和非阻塞。
父子进程中的执行的是执行代码,代码太长不好控制,无法执行一些命令。
system = fork + exec
好处:不会打断,不会引来竞争关系
1.就绪态
2.执行态
3.僵尸态
4.等待态
daemon:后面加.d,基本上就是守护进程
特点:
1.长期运行
管道通信:
单双工:
数据流动只能从一端到另一端
半双工:
一会从这端到另一端,一会从另一端到这段(潮汐车道)
全双工:
双向流动
有名管道:
使用makefilo创建的,然后再两个进程分别用open打开获得fd,一个读一个写,通过文件名将两个联系在一起。
共享内存:
消息队列;
简介:
1.是一个轻量级的线程,脱胎于进程,都可以参与操作系统的调用
2.参与操作系统调用的最小单元,也就是os调用其实是线程
与进程的关系:
1.进程中可以有很多线程
2.如果进程消亡,进程中的线程也会消亡
3.线程消亡,不影响进程以及进程中的其他线程
为什么要有线程?
通信效率高
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:获得当前进程的父进程
操作系统的复制性就是多进程引起的——》操作系统设计复杂就是为了多线程
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返回错误
基本功能相同,waitpid可以回收指定的pid的子进程,wait可以接收任何id的子进程。
waitpid可以采用2种模式阻塞和非阻塞。
wait是阻塞的。
父子进程中的执行的是执行代码,代码太长不好控制,无法执行一些命令。
引入exec函数族,通过exec可以执行可执行文件
system = fork + exec
好处:不会打断,不会引来竞争关系
坏处:占用太对cpu,影响别的进程的执行
1.就绪态
2.执行态
3.僵尸态
4.等待态
4.暂停态
daemon:后面加.d,基本上就是守护进程
特点:
1.长期运行
2.与控制台脱离,一般进程与控制台绑定
十六.进程间通信
很少用,开销大
十七.管道
管道和有名管道,默认为无名管道。管道通信:
单双工:
数据流动只能从一端到另一端
半双工:
一会从这端到另一端,一会从另一端到这段(潮汐车道)
全双工:
双向流动
有名管道:
使用makefilo创建的,然后再两个进程分别用open打开获得fd,一个读一个写,通过文件名将两个联系在一起。
共享内存:
消息队列;
克服管道只能传输无格式的字节流。本质就是链表。
简介:
1.是一个轻量级的线程,脱胎于进程,都可以参与操作系统的调用
2.参与操作系统调用的最小单元,也就是os调用其实是线程
与进程的关系:
1.进程中可以有很多线程
2.如果进程消亡,进程中的线程也会消亡
3.线程消亡,不影响进程以及进程中的其他线程
为什么要有线程?
通信效率高