进程概念

一、认识冯.诺依曼体系结构
1、认识冯.诺依曼体系结构图
进程概念_第1张图片
输入单元:包括键盘,鼠标,扫描仪,写板等。
中央处理器(CPU):含有运算器和控制器等。
输出单元:显示器,打印机。
二、操作系统
概念:是一款纯正的搞管理的软件,管理计算机软硬件资源,方便用户使用。
作用:管理计算机软硬件资源 为用户提供良好的使用环境
如何管理:先把需要管理的对象描述起来,用结构体来描述。
在把需要管理的资源组织起来,通过链表等数据结构。
操作系统管理硬件资源通过一系列的驱动程序来管理。
系统调用和库函数的关系:上下级关系,库函数是把系统调用中的一些接口重新封装在一起。
三、进程
1、概念
进程是一个正在运行的程序,站在擦做系统的角度来看,进程就是一个PCB,操作系统用一个结构体来描述进程,Linux中这个结构体叫做task_struct.
2、描述:用一个结构体(PCB)来描述
3、task_struct内容分类
这个结构体的内容有很多,我们这里列举出来一些重要的来分类
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。 I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
4、查看进程
(1)通过/proc/系统文件来查看
(2)通过系统调用来获取进程ID,getpid(),那个进程调用获取的就是那个进程的pid .
(3)通过ps 命令来查看进程,ps aux,ps -ef (查看所有的进程信息) ,查看某一指定进程后面加 |(管道符)grep 进程ID
ps -ef | grep 进程号
5、创建进程
通过调用fork来创建新的进程,那个进程调用了这个函数,创建的进程就是这个进程的子进程。

#include 
#include 
#include 
int main()
睡眠状态{
 int ret = fork();
 printf("hello proc : %d!, ret: %d\n", getpid(), ret);
 sleep(1);
 return 0;
}
创建的子进程与父进程共用代码,数据各自开辟空间,采用写实拷贝。
父进程与子进程运行的代码相同

既然父子进程一样,如何用来区分?
fork的返回值可以帮我们实现区分到底哪个是父进程那个是子进程,返回值是0,代表这是子进程,返回值大于0,代表这是父进程,并且返回值就是子进程的进程id,如果返回值为-1,代表这是父进程,子进程创建失败。
6、进程状态
R(运行状态) S(睡眠状态,可终端睡眠状态)D(不可中断睡眠状态)T(停止状态) X(死亡状态) Z(僵尸状态)
7、僵尸进程
原因:僵尸状态出原因将会保存起来,占用系统资源,等待父进程来读取子进程的退出状态码,如果父进程未及时读取,子进程将会进入僵尸状态,成为一个僵尸进程。
危害:资源泄露,正常进程无法正常启动。
8、孤儿进程
产生原因:父进程先于子进程退出,子进程成为孤儿进程,这个孤儿进程将被孤儿院init进程收养,子进程脱出后将由init进程来回收释放资源。
9、进程优先级
cpu给进程分配资源的先后顺序叫做进程的优先级。
交互式进程:列入shell,优先级较高。
批处理进程:运行于后台,经常干一些循环的事情,优先级较低。
查看进程的优先级:ps -l PRI的值就为优先级(默认80)NI:这个优先级进程nice 值,优先级值标的修正参数,可以调整优先级,默认为0,范围为 -20~19, 调整方法为:PRI(new)= PRI(old)+NI ,PRI的值越小,优先级越高,如旧的PRI的值为60,则调节范围为40 ~ 79.nice值 运行前修改,renice程序运行后修改。
几个重要的概念:
竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高
效完成任务,更合理竞争相关资源,便具有了优先级
独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为
并发
11、环境变量
操作系统中具有特殊功能的全局变量
查看环境变量:echo $NAME(NAME变量名称)。
export:设置一个新的环境变量env:显示所有的环境变量
unset:清除环境变量
set:显示本地定义的shell变量和环境变量
libc中定义的全局变量environ指向环境向量表,environ没有包含在任何头文件中,在使用时,要用extern 声明
常用getenv和putenv函数来访问特定的环境变量,头文件为#include
10、程序地址空间
叫做虚拟地址空间,每个程序的虚拟地址空间是独立的一个结构体:struct_mm,虚拟地址空间让我们的进程都独立起来。
页表:建立虚拟地址与物理地址之间的映射关系,内从访问控制,控制这个程序访问那些地址,程序对在这段地址的读写。

你可能感兴趣的:(Linux学习)