一、概述
进程、线程的概念
内核态和用户态
内核态嵌入到用户态运行,每个进程都有自己的用户栈和内核栈
Linux系统的一些特性
- 绝对路径和相对路径
绝对路径:是以根目录(" / ")为起点的完整路径,以你所要到的目录为终点,如:/usr/share/doc
相对路径:是你当前的目录(" . ")为起点的路径,以你所要到的目录为终点,如: cd ../man
- 环境变量
环境变量可以实现根目录的变换,提示字符的显示,执行文件查找的路径等;在linux中打开程序可以直接在终端中打开,即通过path指定的路径去打开
配置环境变量:vim ~/.bash_profile
将要声明的环境变量加到PATH=$PATH:$HOME/bin这一行之后,修改完成之后要source ~/.bash_profile,环境变量就可以生效。
- 开机自启
在/etc/rc.local中编辑需要开机自启的命令
- DISPLAY变量
参考链接:Linux DISPLAY变量的使用技巧 - kevinboy - 博客园
- 正则表达式
\w 的释义都是指包含大 小写字母数字和下划线 相当于([0-9a-zA-Z])
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
[ ] 查找字符合集,如[abc]代表a,b,c中的一个
{ }一般是用来匹配的长度。比如A{3}表示匹配三个A,B{1,3}表示匹配1到3个B
二、linux运行机制
软中断
软件模拟的中断,在中断的上下文中执行tasklet(小任务)
工作队列
类似tasklet,但运行于工作者线程的上下文。
系统调用
用户程序是怎么进入内核态的:
1)执行系统调用程序
2)用户栈切换到核心栈(一个程序在linux中有两个执行栈)
三、进程管理
进程的概念
进程是一个运行的实体,有自己的地址空间,并占有一定资源。不同进程可以使用相同的虚拟地址,因此每个进程都有各自的页表。页表、程序计数器和寄存器确定了一个机器的状态,通常称该状态为一个进程,
进程通常是正在执行的一个程序或者命令。例如桌面上每个窗口都是一个进程,Shell是一个进程,在Shell敲命令运行的程序又是一个新进程。
进程的描述
linux中通过进程控制块来描述进程(PCB),即task_struct。
如果一个进程占据了处理器,那这个进程就是活跃的(active),否则则是非活跃的(inactive)。
进程管理的作用
计算机中的进程有很多,但是能够承载进程的硬件资源却是有限的,此时就需要进程管理进行调度。一个硬件线程同一时间只能运行一个进程,操作系统可以实现多个进程间的切换,切换要运行的进程称为调度。
操作系统可以通过加载进程的命令令一个进程活跃起来,同时激活程序计数器,进程将会在PC中保存的值开始执行。注意进程的地址空间,以及它在主存中可以访问的所有数据,都由驻在主存中的页表所定义。操作系统只是简单的加载页表寄存器用来指向它想激活的进程的页表,而不是保存整个页表。操作系统负责分配物理内存和更新页表,因此不同进程的虚拟地址空间不会发生冲突,也就是说分离的页表能保护进程。
- 判断计算机健康状态
包括内存占用,是否死机等 - 查看系统中所有的进程
- 杀死进程
进程的生命周期
进程僵死:进程死掉了已经释放了进程的资源,但是task-struct还在,即父进程还没有来得及清理这个进程的task-struct等信息。所以僵尸是一个短暂的临界状态。
进程、线程的层次关系
如果PID相同,则表示一个线程组
进程的调度
CFS调度算法
一个调度主体自己作为一个组参与调度,即组内调度实体再调度。
调度实体既可以指进程,又可以指进程组
调度时机
1)系统调用或内核线程主动放弃时,即内核设计时人为插入“重新调度”(包括schedule、_cond_resched等)语句
例如x86中内核代码如下:
IO操作时间长可进程调度提高效率
2)延迟调度,在中断、异常和系统调用执行结束返回用户态前,如果设置了“重新调度”语句
等待系统稳定后,将之前本来延迟的调度重新执行。
四、 Linux内存管理
当多个进程在操作系统上打开时,一个进程可能会覆盖另一个进程的内存空间,此外一个进程运行的内存可能需要比实际拥有的内存空间更大,此时需要用虚拟存储器,从而给每个进程拥有完整内存地址空间的错觉。
虚拟存储器允许操作系统共享内存,保证各个程序不会互相读写
关于虚拟内存关系详细,见链接:计算机体系结构——存储层次结构——虚拟存储器_KGback的博客-CSDN博客
五、linux文件系统
linux文件系统通常是和操作系统镜像以独立的分区存储在硬盘或者SD卡中,同时也存在一种较为简单的文件系统
- 循环设备
循环设备是一种块设备,其并不指向硬盘或者光驱,而是指向一个文件块或者另一种块设备。可以用于制作操作系统的镜像文件。
具体参考:Linux中loop设备和kpartx挂载虚拟文件系统详解_香莲清风_新浪博客