Linux操作系统 知识总结(一)

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状态转换图

原文地址:https://www.cnblogs.com/biu-we/p/14072681.html