一、进程的调度算法
操作系统的调度分为三种:1,远程调度(创建新进程)
2,中程调度(交换功能的一部分)
3,短程调度(下次执行哪个进程)
当发生下面几种情况的时候会调用短程调度器,然后就看下此次执行哪个进程。
1,时钟中断;2,I/O中断;3,操作系统调用;4,信号
进程的调度算法:1,先来先服务调度算法(FCFS)
2,短作业优先调度算法(SPN)
3,最高响应比优先调度算法
4,轮转调度算法
5,多级反馈队列
二,task_struct结构体, 结构体中的各个字段的含义
https://blog.csdn.net/qq_39539470/article/details/79542862
转自其他大佬的博客
三、代码模拟实现僵尸进程, 孤儿进程的场景
1.僵尸进程
僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t id = fork();
if (id < 0)
{
perror("fork");
return 1;
}
else if (id > 0)
{
//father
printf("father [%d] is sleeping...\n", getpid());
sleep(30);
}
else
{
printf("child [%d] is begin Z...\n", getpid());
sleep(5);
exit(EXIT_SUCCESS);
}
return 0;
}
僵尸进程的危害--资源泄露
如何避免;进程等待
处理方式:退出父进程
2,孤儿进程
孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t id = fork();
if(id < 0)
{
perror("fork");
return 1;
}
else if(id == 0)
{
//child
printf("I am child,pid : %d\n",getpid());
sleep(10);
}
else
{
//parent
printf("I am parent,pid : %d\n",getpid());
sleep(3);
exit(0);
}
return 0;
}
四、《深入理解计算机系统》
引自
https://www.jianshu.com/p/e1b82b230917
五,《操作系统精髓设计原理》 进程相关
引自
https://blog.csdn.net/just0kk/article/details/53765108
六,setenv, export等环境变量相关的函数和命令.、
setenv
功能说明:设置或显示环境变量
export[-fnp][变量名称]=[变量设置值]
只在本次登录中有效
再增加的路径用:追加
exportPATH=&PATH:/...
说明
在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。
参数
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量
export
用于设置或显示环境变量
export [-fnp][变量名称]=[变量设置值]
只在本次登录中有效
说明
在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。
参数
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。