进程优先级
- PRI/PR即进程的优先级,通俗说就是程序被CPU执行的先后顺序,此值越小进程的优先级越高
- NI就是nice值,其表示进程可被执行的优先级的修正数值。这样,当nice值为负值时,那么该程序的优先级值会变小,即其优先级会变高,则其越快被执行,所以调整进程的优先级,就是调整进程的nice值,nice值取值范围是-20~19,一共40个级别
- 调整方式,在root用户下,用top命令或者ps命令或者getpid来获取对应的pid之后用renice+对应的nice+对应进程的pid
用户空间&内核空间
- 用户空间:应用程序都是运行在用户空间的,也就是说程序员自己写的代码都是运行在用户空间的,但是,当写的代码中调用了系统调用函数,则会切换到内核空间进行执行,执行完毕后,再返回到用户空间执行用户的代码
- 内核空间:Linux操作系统和驱动程序运行在内核空间。系统调用的函数都是在内核空间中运行的,因为是操作系统提供的函数
写时拷贝
- 父进程创建出来子进程,子进程的PCB会拷贝父进程的,页表也是拷贝父进程的,在最初的时候,对父子进程来说,同一个变量的虚拟地址和物理地址的映射关系是一样的,也就是说,操作系统并没有给子进程当中的变量在物理内存当中分配空间进行存储,子进程的变量还是父进程的物理地址中的内容
- 当发生改变时,才以写时拷贝的方式拷贝一份数据到物理内存中,此时父子进程通过各自的页表,指向不同的物理地址,当不发生改变时,父子进程共享同一个数据
fork的一些用法
-
守护进程,提高程序“高可用”的一种手段
父进程创建子进程,通过进程程序替换,让子进程执行真正的业务,父进程负责守护子进程。如果子进程执行业务的时候,意外结束了,父进程负责重新启动子进程,让子进程继续提供服务
缓冲方式
- 全缓冲:当缓冲区写满了的时候,才进行IO
- 行缓冲:当在输入和输出中遇到换行符时,标准I/O库执行I/O操作
- 不缓冲:不带缓冲,标准I/O库不对字符进行缓冲存储
进程等待
进程程序替换
-
exec函数簇:execl函数、execlp函数、execle函数、execv函数、execvp函数、execve函数、
-
这些函数都要求第一个参数是可执行程序本身
-
函数名中带有“p”:可以使用环境变量PATH,无需写全路径,也就是说,函数会搜索可执行程序PATH,找到可执行程序,所以不用写路径。那环境变量是从哪来的呢?是从被替换的那个进程当中来的。
函数名中带有“l”:传递给可执行程序的参数是以可变参数列表的方式传递,参数是传递给替换成为的那个可执行程序的。第一个参数是可执行程序本身;如果要传递多个参数,用“,”隔开;末尾以NULL结尾。
函数名当中带有e的,需要程序员自己传递环境变量
函数名带v的,传递给替换成为的程序的命令行参数都是以指针数组的方式进行传递。
execve是系统调用函数,其他几个都是库函数。
基础IO
-
参考之前博文:【Linux】基础IO-1林深方见鹿的博客-优快云博客
-
参考之前博文:【Linux】基础IO-2林深方见鹿的博客-优快云博客