ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习笔记6

2021-10-24 13:00:48  阅读:194  来源: 互联网

标签:fork sched 笔记 学习 Unix 内核 Linux 进程


学习笔记6

自学教材第3章,提交学习笔记(10分)

知识点归纳以及自己最有收获的内容 (3分)

问题与解决思路(2分)

实践内容与截图,代码链接(3分)

...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)

 

 

第三章Unix/Linux进程管理:

进程与线程的发展演化的目标,是为了更快的创建进程/线程,更小的上下文切换开销,更好的支持SMP以及HMP架构的CPU。 线程上下文(例如各个寄存器状态,pc指针)的切换比进程开销要小得多。

系统需要运转起来,代码都是静态的,进程才具有生命力,进程是程序的动态执行过程 ,进程正是操作系统的心脏所在。何为进程?进程是处于执行状态的代码以及相关资源的集合,不仅仅是代码段(text section),还包括文件,信号,CPU状态,内存地址空间等。线程基本可以等同于进程般对待

本章讨论了Unix/Linux中的进程管理;阐述了多任务处理原则;介绍了进程概念;并

以一个编程示例来说明多任务处理、上下文切换和进程处理的各种原则和方法。多任务处理

系统支持动态进程创建、进程终止,以及通过休眠与唤醒实现进程同步、进程关系,以及以

二叉树的形式实现进程家族树,从而允许父进程等待子进程终止;提供了一个具体示例来阐

释进程管理函数在操作系统内核中是如何工作的;然后,解释了Unix/Linux中各进程的来

源,包括系统启动期间的初始进程、INIT进程、守护进程、登录进程以及可供用户执行命

令的sh进程;接着,对进程的执行模式进行了讲解,以及如何通过中断、异常和系统调用

从用户模式转换到内核模式;再接着,描述了用于进程管理的Unix/Linux系统调用,包括fork, wait, excc exit;闹明了父进程与子进程之间的关系,包括进程终止和父进程等待操作之间关系的详细描述;解释了如何通过INIT进程处理孤儿进程,包括当前Linux中的subreaper进程,并通过示例演示了subreaper进程;接着,详细介绍了如何通过exec更改进程执行映像,包括execve系统调用、命令行参数和环境变量;解释了10重定向和管道的原则及方法,并通过示例展示了管道编程的方法;读者可借助本章的编程项目整合进程管理的各种概念和方法,实现用于执行命令的sh模拟器。sh模拟器的功能与标准sh完全相同。

它支持简单命令、具有1O重定向的命令和通过管道连接的多个命令的执行。

3.1多任务处理

一般来说,多任务处理指的是同时进行几项独立活动的能力。比如,我们经常看到有人一边开车一边打电话。从某种意义上说,这些人正在进行多任务处理,尽管这样非常不好。

con) 系统

 

Linux是类Unix系统,借鉴了Unix的设计并实现相关接口,但并非Unix。Linux是由Linus Torvalds于1991年创造的开源免费系统,采用GNU GPL协议保护,下面列举Linux的一些主要特点:

 

Linux系统中万物皆为文件,这种抽象方便操作数据或设备,只需一套统一的系统接口open, read, write, close即可完成对文件的操作

Linux是单内核,支持动态加载内核模块,可在运行时根据需求动态加载和卸载部分内核代码;

Linux内核支持可抢占;

Linux内核创建进程,采用独特的fork()系统调用,创建进程较高效;

Linux内核并不区分进程和线程,对于内核而言,进程与线程无非是共享资源的区别,对CPU调度来说并没有显著差异。

Linux的进程管理命令:

(1)Who:查看当前用户 会出现root、tty1-tty6、tty7,root:当前用户。  tty1-tty6:文字终端。 tty7:界面终端

(2)Ps:查看进程   ps-a可查看当前操作系统下的所有用户信息。     ps au:在显示所有用户信息上做一个更加细节的信息展示。   Ps-aux:查看没有中断的应用程序。

(3)kill:杀死程序  kill-l查看信号 ,

(4)top:相当于windows下的任务管理器

(5)进程同步:是指控制和协调进程交互以确保其正常执行所需的各项规则和机制,最简单的进程工具是休眠和唤醒,即使用linux’单核操作的机制,当改变单核里的任何一项时,均不会造成影响。

 

进程管理调用:

进程控制

fork     创建一个新进程

clone      按指定条件创建子进程

execve    运行可执行文件

exit  中止进程

_exit 立即中止当前进程

getdtablesize 进程所能打开的最大文件数

getpgid  获取指定进程组标识号

setpgid                             设置指定进程组标志号

getpgrp  获取当前进程组标识号

setpgrp  设置当前进程组标志号

getpid    获取进程标识号

getppid  获取父进程标识号

getpriority     获取调度优先级

setpriority      设置调度优先级

modify_ldt     读写进程的本地描述表

nanosleep     使进程睡眠指定的时间

nice 改变分时进程的优先级

pause     挂起进程,等待信号

personality    设置进程运行域

prctl 对进程进行特定操作

ptrace    进程跟踪

sched_get_priority_max 取得静态优先级的上限

sched_get_priority_min 取得静态优先级的下限

sched_getparam   取得进程的调度参数

sched_getscheduler     取得指定进程的调度策略

sched_rr_get_interval   取得按RR算法调度的实时进程的时间片长度

sched_setparam   设置进程的调度参数

sched_setscheduler      设置指定进程的调度策略和参数

sched_yield    进程主动让出处理器,并将自己等候调度队列队尾

vfork      创建一个子进程,以供执行新程序,常与execve等同时使用

wait 等待子进程终止

wait3      参见wait

waitpid   等待指定子进程终止

wait4      参见waitpid

capget    获取进程权限

capset    设置进程权限

getsid     获取会晤标识号

setsid     设置会晤标识号

 

在Linux中,创造新进程的方法只有一个,就是fork。其他一些库函数,如system(),看起来似乎它们也能创建新的进程,如果能看一下它们的源码就会明白,它们实际上也在内部调用了fork。包括我们在命令行下运行应用程序,新的进程也是由shell调用fork制造出来的。fork有一些很有意思的特征,下面就让我们通过一个小程序来对它有更多的了解。

/* fork_test.c */

#include

#inlcude

main()

{

 pid_t pid;

 /*此时仅有一个进程*/

 pid=fork();

 /*此时已经有两个进程在同时运行*/

 if(pid<0)

 printf("error in fork!");

 else if(pid==0)

 printf("I am the child process, my process ID is %d

",getpid());

 else

 printf(")

 

 

linux管道:

“管道可以根据一组命令按照数据流向的方式来进行操作。简单的说,第一个命令执行后,不回显结果,而是把结果通过管道传递给第二个命令,第二个命令处理后再传给第三个….直到没有管道符后才终止命令,并回显最终结果。

管道可以把不同的命令组合成强大的指令集合。比如,对文件夹下所有的txt结尾的文件重命名,就需要三个管道符号,四个命令完成。

标签:fork,sched,笔记,学习,Unix,内核,Linux,进程
来源: https://www.cnblogs.com/zhaoziyu/p/15450718.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有