Linux操作系统 知识总结(一) Linux基础 vi编辑器 gcc 进程管理概念 Linux内核运行模式 进程控制 ps命令 进程调度 Linux实时进程调度算法 Linux调度器 CFS算法 调度时机 进程互斥与同步 进程通信分类 操作系统存储管理 Linux页故障及处理 存储扩充 虚拟存储器原理 shell进程执行过程图 Linux状态转换图

  • 创建文件夹 mkdir, 删除文件夹 rmdir

  • 查看文件夹 cat,分页查看 more

  • 复制文件cp, rm 删除文件 mv移动文件

  • 统计文件内容 wc -c 统计字节数 -l 统计行 -m 统计字符数 -w 统计字数

  • 排序 sort -kn制定n开始排序 -r逆序

  • 修改文件读写权限 chmood ,分为数字权限和字符权限

  • touch -a 修改文件时间标签为现在时间

  • 重定向 命令 < 文件 如:cat > file//快速建立文件

  • 管道 |, 命令1 | 命令2,将命令连接起来。

vi编辑器

  • 1.命令模式:用于执行各个文本编辑命令。
  • 2.插入模式:用于完成文本录入工作。
  • 3.末行模式:接收输入命令并执行。

gcc

  • 预处理->编译与汇编->链接
gcc [选项] 文件列表

gcc -o tes test.c //编译成可执行文件

进程管理概念

  • 进程:是一个可并发执行的程序在一个数据集上的一次运行。
进程特性
1.动态性:进程创建而产生,由撤销而消亡,因为调度而运行,因为等待而停顿。
2.并发性:在同一时间段内有多个进程在系统中活动。
3.独立性:进程是独立运行的基本单位,是操作系统分配资源和调度管理基本对象。
4.异步性:每个进程独立运行,按照着不可预知的速度前进。

进程基本状态
1.就绪态:进程已经分配到除CPU之外的所有资源。
2.运行态:进程已经获得CPU,正在运行,这时的进程状态称为运行态。
3.等待态:进程因某种资源不能满足,或某事件尚未发生而暂停执行时,称为等待态。

Linux内核运行模式

  • Linux的内核运行在核心态,而用户程序则只能运行在用户态。从用户态转换为核心态的唯一途径是中断(包括陷入)。一旦CPU响应了中断,则将CPU的状态切换到内核心态,待中断处理结果返回时,再将CPU状态切换回用户态。
  • 由于进程在其运行期间经常会被中断打断,也经常需要调用系统调用函数,因此CPU也经常地会在用户态与核心态之间切换。计算和处理时,进程进入用户态,执行系统调用或中断处理程序进入核心态,执行内核代码。调用返回后又回到用户态继续运行。

进程控制

  • 指对进程生命周期进行有效的管理,实现进程的创建、撤销以及进程各状态之间的转换等控制功能。

  • 1.创建进程:创建一个新进程操作,根据创建参数建立进程的PCB,为其分配资源,然后将PCB链入进程链表和可执行队列中,等待运行。

  • 2.撤销进程:当一个进程运行终止时需要撤销它。撤销进程操作是:将进程的PCB从进程对列及链表中摘出,释放进程所占用的资源,最后销去PCB.

  • 3.阻塞进程:当正在运行的进程因某种原因无法运行下去时,就会转入等待状态。阻塞的工作是将运行态转换成等待态,阻塞进的操作是:中断进程执行保存CPU现场,然后将PCB插入到等待队列中,最后调用进程调度程序,从可执行队列中选择一个进程投入运行。

  • 4.唤醒程序: 处于等待转态的进程所等待的事件出现时内核唤醒它。唤醒进程是从等待态转入到就绪态。唤醒进程的操作是:在等待进程中找到满足唤醒条件的进程,将其PCB插入到可执行队列中。

ps命令

  • 查看进程信息命令ps,该命令可查看记录在进程描述符task_struct中的几乎所有信息。
    ps [选项]
-e     :      显示所有进程。
-t tty :      显示终端tty上的进程。
-f     :      以全格式显示。
-o     :      以用户自定义格式显示。
a      :      显示所有终端上的所有进程。
u      :      以面向用户格式显示。
x      :     显示所有不控制终端进。

进程调度

  • 进程调度的功能是按照一定的策略把CPU分配给就绪进程,使它们轮流地使用CPU。
    常用的调度算法
(1)先进先出法:按照进程可执行队列中的先后次序来调度,缺点是对紧迫任务的响应时间过长。
(2)短进程优先法:优先调度短进程运行,以提高系统的吞吐量,但对长进程不利。
(3)时间片轮转法:进程按规定的时间轮流使用CPU。可满足系统对用户响应时间的要求,有很好的公平性。时间片长度的选择应适当,过短会导致调用频繁,过长则会用户响应较慢。
(4)优先级调度法:为每个进程设置优先级,调度时优先选择优先级高的进程运行,使迫切的任务优先运行。调度法可以将优先级为静态优先和动态优先级。静态优先级是预先指定的,动态优先级则随着进程的运行时间而降低或升高。
  • 实际应用中,会搭配多种策略结合使用,如时间片轮转也可适当考虑优先级因素,对紧急的可以分配长一点的时间片,或连续运行多个时间片。

Linux实时进程调度算法

  • 1.调度策略:Linux将进程分为实时进程与普通进程(非实时)两类,分别采用不同的的调度策略。
  • 2.实时优先级:标示实时进程优先权的高低,范围可在0(最低)99(最高),实时进项为199,非实时为0。
  • 3.静态优先级:进程的基本优先级。进程在创建之初继承了一个表优先程度,它决定进程的静态优先级,普通进程为范围为100(最高)~139(最低),默认为120,实时进程的此项无实际意义。
  • 4.动态优先级:进程调度使用的实际优先级。它是对静态优先级的调整。
  • 5.时间片:进程当前剩余时间。

Linux调度器

  • RT调度器:实时进程的原则是严格按优先级调度,在同一优先上采用先进先出或轮转法进程调度
(1)实时进程可执行队列:采用rt_rq结构描述,其中包括了实时调度所需的各个信息。
(2)实时进程的调度策略:先进先出法:程序依次选择当前最高优先级FIFO类型的进程,调度其运行。轮转法:给每一个实时进程分配一个时间片,然后按照它们的优先级加入到相应的优先级队列中。
(3)实时调度的实施:当一个实时进程就绪时,内核将会根据它的优先级其放入相应队列尾部。
  • CFS调度器
(1)调度策略的公平性:普通调度法就是完全公平调度法,CFS放弃了时间片的概念,保证在调度周期内都能分到的比例获得运行机会
(2)CFS调度原理:是将CPU的使用权按比例分配给各就绪进程,据此算出各进程在一个调度周期内运行的时间。分配依据是进程负载权重。将每个设置为虚拟时钟,用于进程计量进程已消耗的CPU时间。
(3)CFS的可执行队列:当一个进程转入就绪态后,内核将其插入红黑树中适当的位置;当一个进程被选为中运行,它的节点就在树中摘去。
(4)CFS调度的实施:当一个普通进程就绪时,CFS调度器根据他的虚拟时钟值插入到红黑树中。

CFS算法

  • CFS调度算法的核心思想是:虚拟运行时间,算法认为,所有进程的虚拟运行时间相等时,才对所有的进程公平,这时说明cpu时间时按照进程的权重来平均分配的。所以每次都从调度树中选择一个虚拟运行时间最小的进程来运行。
  • 进程切换的时机是:当前运行时间和理想运行时间比较,如果大于,说明进程占用了过多的时间,需要惩罚,这时就选择其他的进程来运行。

调度时机

  • 1.当前进程放弃CPU,转入睡眠、暂停或僵死态。
  • 2.当前进程让出CPU,转入就绪态。
  • 3.当前进程的时间片用尽。
  • 4.有更高优先的进程就绪。

进程互斥与同步

  • 互斥:禁止多个进程同时进入各自的访问同一个临界资源的临界区,以保证对临界资源的排他性使用。
  • 同步:指进程间为合作完成一个任务而互相等待、协调步调。

进程通信分类

  • 从通信的功能分类来分,可分为低级通信和高级通信两类。

  • 1.低级通信:只是传输少量的数据,用于通知对方某个事件。低级用信息、信号量传送方式。

  • 2.高级通信:可以用来在进程之间传输大量的信息。高级用消息、管道和共享内存。

  • 通信同步来分,可分为同步通信与异步通信两类。

  • 1.通信同步:是指通信双方进程共同参与整个通信过程,步调协调地送和接收数据。传输方式:管道、共享内存。比如:打电话,双方同时在线,才可通话。

  • 2.异步通信:通信双方的联系比较松散,通信的发送方不必考虑对方的状态,发送完就继续运行。传输方式:信号、消息。比如:发电子邮件不必关心对方是否何时接收。

1.信号量:分为内核信号和IPC信号量。IPC信号量是用户态进程使用的同步与互斥机制。
2.信号:是进程间可互相发送的控制信息,一般只是几个字节的数据,用于通知进程有某个事件发生。
3.管道:是连接两个进程的一个数据传输通道,一个进程向管道写数据,另外一个进程从管道读数据,实现两进程之间同步传递字节流。
4.消息队列:消息是结构化的数据,消息队列是由消息链接而成的链式队列。
5.共享内存:共享内存通信方式就是在内存中开辟一段存储区,将这个区映射到多个进程的地址空间中,使得多个进程共享这个内存区。

操作系统存储管理

  • 内存管理4种功能:
(1)存储空间分配:为准备进入系统准备运行进程分配空间。内存回收:进程运行完成后,将其空间回收。
(2)存储地址的变换:程序进入存储后,必须把程序中的逻辑地址转换为程序所有在实际内存地址,称为地址变换,或称地址映射。
(3)存储空间的保护:确保每个进程都在自己的地址空间运行,尤其是不允许用户进程访问操作系统的存储区域。
(4)存储空间的扩充:借用外存空间来扩展内存空间,方法是让程序的部分代码进入内存,需要时再调入内存。
  • 段式存储管理:程序的地址空间由若干大小不等的段组成。段是逻辑上完整的信息单位,划分是按照信息的逻辑完整性及共享和保护。
  • 页式存储管理:产生的内存碎片使内存地址不连续。页式可以将存放不连续的存储空间,使得内存每一个空闲的区域都可以被程序使用。

Linux页故障及处理

  • 页故障:是指在CPU解析一个线性地址时发生异常中断。引起也故障的原因主要有非法访问和缺页。
  • 引起缺页的原因有3种
1.该页还没有分配到页帧。
2.该页的页帧已经被回收。
3.写操作引发了写时复制。
  • 缺页处理过程
(1)如果相应的页表项还没有设置(内容为全0),表明该页未分配过页帧。此时将根据映射类型进行处理:如果是文件映射,则为其分配一个新页帧,然后调用虚存区操作集vm_ops中的 fault()函数,将页面从文件空间中读入新页帧;如果是匿名映射,就将其映射到内核中一个只读的全0页的页帧。
(2)如果页表项已存在但“存在位P”为0,说明该页已被交换到交换区。这种情况将调用 do_swap_page()来处理,它根据页表项中存放的交换地址在交换区中找到该页,为其重新分配一个页帧,将其从交换区读入。
(3)如果页表项存在,且页表项的“存在位P”为1,“读写位R/W”为0,而触发缺页异常的标志为写操作,表示进程正试图写一个只读页。此时将调用写时复制的处理函数do wp page(),将该页复制到一个新页帧中。

存储扩充

(1)覆盖技术:原理是将一个程序划分为几个模块。程序必要模块放在常驻内存,其余模块共享一个或几个存储空间。它们平时驻留在外存中,在需要时才装入内存,覆盖暂时不用的模块。
缺点是:必须在编程时对程序进行模块划分,并缺点模块之间的覆盖关系。

(2)交换技术:在多个程序并发执行时,往往有一些程序因等待某事件而暂时不能运行。将不能运行的程序换到外存中,就可以获得空闲内存空间,交换是以进程为单位进行交换。
优点:增加了并发运行程序数目,且对程序结构没有要求。
缺点:对整个进程进行换人、换出操作需要花费大量的CPU时间。

(3)虚拟存储器:上面两种都不能称为虚拟存储,因为看到的还是实际大小。原理是:将程序的部分代码调入内存,其余驻留外存空间中,在需要时调用入内存。存储扩充也是最好的。

虚拟存储器原理

  • 虚拟存储器:是用外存模拟内存,实现内存空间的扩充。方法是:在外存开辟一个存储空间(磁盘空间),称为交换区。进启动时,只有部分程序代码进入内存,其余驻留在磁盘中,需要的时候调入内存。

  • 虚拟存储器的实现技术主要有页式虚存和段存虚存两种。Linux采用页式虚存技术,也是最常用。

  • 页式虚拟:就是在页式存储管理管理上加入以页为单位的内外存空间的交换,来实现存储空间扩充功能。

shell进程执行过程图

Linux操作系统 知识总结(一)
Linux基础
vi编辑器
gcc
进程管理概念
Linux内核运行模式
进程控制
ps命令
进程调度
Linux实时进程调度算法
Linux调度器
CFS算法
调度时机
进程互斥与同步
进程通信分类
操作系统存储管理
Linux页故障及处理
存储扩充
虚拟存储器原理
shell进程执行过程图
Linux状态转换图

Linux状态转换图

Linux操作系统 知识总结(一)
Linux基础
vi编辑器
gcc
进程管理概念
Linux内核运行模式
进程控制
ps命令
进程调度
Linux实时进程调度算法
Linux调度器
CFS算法
调度时机
进程互斥与同步
进程通信分类
操作系统存储管理
Linux页故障及处理
存储扩充
虚拟存储器原理
shell进程执行过程图
Linux状态转换图