linux课程总结(代码片段)

ustczxc ustczxc     2022-12-06     219

关键词:

1. Linux系统如何启动

Linux系统开机首先运行BootLoader,然后由BootLoader引导启动内核,由内核检查和初始化硬件设备,载入设备的驱动程序模块,安装root文件系统,然后内核将启动一个名为init的进程。在Init运行完成并启动其它必要的后续进程后,系统开始运行,引导过程结束。init进程启动时需要读取inittab配置文件,该文件确定init在系统启动和关机时的工作特性。

2. Linux的中断处理流程

中断的概念:中断是指CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。分为外部中断(硬件中断)和内部中断(异常)。

中断处理过程由三部分组成

  1. 准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求打断低级的中断服务程序
  2. 处理部分,即真正执行具体的为某个中断源服务的中断服务程序
  3. 结束部分,首先是关中断,以防止在恢复现场过程中被新的中断请求打断,接着恢复现场,然后开放中断,以便返回原来的程序后可响应其它的中断请求,中断服务程序的最后一条指令一定是中断返回指令

中断上下文切换

  1. CPU关键上下文切换,比如中断信号、中断指令、iret中断返回指令
  2. 保存现场和恢复现场,中断处理程序的头部和尾部

3. 系统调用

用户态和内核态

Linux操作系统的体系架构分为用户态和内核态。计算机的硬件资源是有限的,为了减少有限资源的访问和使用冲突,CPU和操作系统必须提供一些机制对用户程序进行权限划分。现代的CPU一般都有几种不同的指令执行级别,就是什么样的程序执行什么样的指令是有权限的。在高的执行级别下,代码可以执行特权指令,访问任意内存,这时CPU的执行级别对应的就是内核态,所有的指令包括特权指令都可以执行。相应的,在用户态,代码能够掌握的范围会受到限制。

系统调用

系统调用是一种特殊的中断,中断分为外部中断和内部中断,内部中断又称为异常,异常又分为故障和陷阱。系统调用就是利用陷阱这种软件中断方式主动从用户态进入内核态。一般来说,从用户态进行内核态由中断触发,可能是硬件中断,在用户态进度执行时,硬件中断信号到来,进入内核态,就会执行这个中断对应的中断服务例程。也可能是用户态程序执行过程中,调用了一个系统调用,陷入内核态,叫做陷阱

系统调用的功能和特性

  1. 把用户从底层的硬件编程中解放出来。操作系统为我们管理硬件,用户态进程不用直接与硬件打交道
  2. 极大的提高系统的安全性。如果用户态进程直接与硬件设备打交道,会产生安全隐患,可能引起系统崩溃
  3. 使用户程序具有可移植性,用户程序与具体的硬件已经解耦合并用接口代替了,不会有紧密的关系,便于在不同系统间移植

4. 进程调度

进程的分类

  1. 批处理进程 :此类进程不需要人机交互,在后台运行,需要占用大量的系统资源,但是能忍受响应延迟,如编译器
  2. 交互式进程 : 此类进程有大量的人机交互,因此进程不断地处于睡眠状态,等待用户输入,典型的应用比如编译器Vim.此类进程对系统响应时间要求较高,否则用户会感觉系统反应迟缓
  3. 实时进程 : 实时进程对调度延迟的要求最高,这些进程往往执行非常重要的操作,要求立即响应并执行 。比如视频播放软件

进程的状态

  1. 运行态
  2. 可运行态
  3. 等待态
  4. 暂停态
  5. 僵死态

技术图片

进程的创建

  1. Frok,Vfork和clone系统调用创建新进程
  2. exec系统调用执行一个新程序
  3. exit系统调用终止进程(进程也可以因收到信号而终止)

进程的撤销

撤销时机

  • 主动撤销:执行完代码,通知内核释放进程的资源
  • 被动:内核有选择地强迫进程死掉
    • 当进程接收到一个不能处理或忽视的信号时
    • 当内核代表进程在运行时,在内核态产生一个不可恢复的CPU异常

撤销过程分为

  • 进程终止:释放进程占有的大部分资源
    • do_exit()
  • 进程删除:彻底删除进程的所有数据结构

进程删除

  • 父进程调用wait()类系统调用检查子进程是否终止
  • 若子进程包含终止代号,则父进程通过release()释放僵死进程的描述符

进程同程序的比较

  1. 程序时指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
  2. 程序可以作为一种软件资料长期存在,而进程是有一定生命期的,程序时永久的,进程是暂时的
  3. 进程更能真实地描述开发,而程序不能
  4. 进程是由PCB、程序段和数据段三部分组成
  5. 进程具有创建其它进程的功能,而程序没有
  6. 同一程序同时运行于若干个数据集上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程

进程调度的功能

  1. 记录系统中所有进程的执行情况
  2. 选择占有处理机的进程
  3. 进行进程上下文切换。一个进程的上下文包括进程状态、有关变量和数据机构的值、机器寄存器的值和PCB以及有关程序、数据等

进程调度的时机

  1. 进程状态发生变化时
  2. 当前进程时间片用完
  3. 进程从系统调用返回用户态
  4. 中断处理后,进程返回到用户态

为何要进程调度

  1. 非剥夺方式
  2. 剥夺方式:优先权原则,短进程,优先原则,时间片原则

技术图片

技术图片

active:活动进程
expired:过去进程

对交互进程和批处理进程的分别处理

  1. 为提高交互进程的性能,用完时间片的活动批处理进程总是变成过期进程
  2. 用完时间片的活动交互进程通常仍然是活动进程,调度程序重填时间片把它留在活动进程集合中
  3. 如果最老的过期进程等待了很长时间,或者过期进程比交互进程的优先级高,调度程序把用完时间片的活动交互进程移到过期进程集合中

实时进程

  1. 实时进程的动态优先级范围1-99
  2. 实时进程总是被当做活动进程
  3. 调度程序总是让优先级高的进程运行
  4. 几个进程优先级相同,调度程序选择第一个出现在本地CPU的运行队列相应链表中的进程运行
  5. 实时进程运行的过程中 ,禁止低优先级进程的执行

Linux进程调度策略

  1. linux的进程调度是基于优先级的调度。进程的优先级是动态的,避免了进程饥饿
  2. linux的进程分普通进程和实时进程,实时进程的优先级高于普通进程。
  3. 普通进程采用普通进程的时间片轮转算法
  4. 实时进程采用实时进程的先进先出或实时进程的时间片轮转算法

进程上下文切换

进程切换:为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复执行以前挂起的某个进程

进程的CPU上下文:在恢复一个进程执行之前,内核必须确保每个寄存器装入了挂起进程时的值。进程恢复执行前必须装入寄存区的一组数据,称为进程的CPU上下文。

硬件上下文:进程恢复执行前必须装入寄存器的一组数据

从本质上说每个进程切换由两部分组成

  1. 切换页全局目录以安装一个新的地址空间
  2. 切换内核态堆栈和硬件上下文

5. 文件系统

文件系统是计算机组织、存取和保存信息的重要手段。

按照文件的数据形式分为:

  1. 源文件
  2. 目标文件
  3. 可执行文件

文件控制块

VFS

可以将VFS看成是一种通用文件系统,它位于应用程序和具体文件系统之间,提供了一层通用的接口,在必要时依赖具体的文件系统

VFS支持的文件系统类型

  1. 基于磁盘的文件系统
  2. 网络文件系统
  3. 特殊文件系统

技术图片

Open操作

所谓打开文件实质上是在进程与文件之间建立连接,而打开文件描述符唯一标识着这个连接。

应用程序对open()的调用将引起内核调用服务例程sys_open()函数,该函数接受的参数为:要打开文件的路径名和访问模式等。该系统调用成功后将返回一个文件描述符,也就是文件对象指针的一个索引,系统调用不成功时返回-1.

6. Linux上的时钟以及如何实现

Linux上有两种时钟,一个是由主板电池驱动的RTC时钟,另一种是内核时钟,有软件来根据时间中断进行计数。内核时钟在系统关机时不存在,操作系统启东时读取RTC时间进行同步,并在系统关机时将时间写会RTC

计时体系结构中的关键数据结构和变量

xtime是从系统中取得的时间,一般是从某一历史时刻开始到现在的时间,即操作系统上显示的时期,它的精度很微妙

jiffies是记录着从开机到现在总共的时钟中断次数。jiffies取决于系统的频率,单位是Hz,是周期的倒数,周期一般是一秒钟中断产生的次数。Linux系统时钟频率是一个常数HZ来决定的,通常HZ==100,精度为10ms。
内核一般通过Jiffies的值来获取当前时间。尽管该数值表示的是自上次系统启动到当前时间间隔,但因为驱动程序的生命期只限于系统的运行期,所以也是可行的。驱动程序利用Jiffies的当前值来计算不同事件间的时间间隔。硬件给内核提供一个系统定时器用以计算和管理时间,内核通过编程预设系统定时器的频率。



课程学习总结报告(代码片段)

课程学习总结报告Linux之进程  概述:进程是Linux进行资源分配和调度的基本单位,进程也被看做是程序的一次执行过程,当持久化在磁盘上的二进制代码被载入内存时,Linux操作系统为其分配了用户栈和内核栈,同时使用task_s... 查看详情

课程学习总结报告(代码片段)

@目录Linux概念模型Linux系统启动用户态和内核态进程管理和调度文件管理例子讲解例子LED灯心得体会与改进建议Linux概念模型在Linux系统分析这门课中,我们主要学习了中断,系统调用,程序加载执行,进程管理,文件系统,计时... 查看详情

课程学习总结报告(代码片段)

...5.进程管理进程创建进程切换二、Linux模型的举例三、对课程的心得体会一、linux系统概念模型1.概述linux系统是一个多用户多任务的分时操作系统,函数调用是操作系统的三大法宝之一,使 查看详情

linux课程第五周实验及总结(代码片段)

 一、学习总结给MenuOS增加time和time-asm命令(四步操作命令)rmmenu-rf强制删除gitclonehttp://github.com/mengning/menu.git  克隆相关信息cdmenumakerootfs一个脚本,自动编译自动生成根文件系统,并自动启动MenuOS使用gdb跟踪系统调用... 查看详情

课程学习总结报告(代码片段)

课程学习总结报告目录课程学习总结报告一.准备二.学习过程ILinux内核II进程管理1进程的数据结构分析2进程创建3进程调度4数据结构:栈5进程的生命周期可以通过如下的图进行一个总结:III存储器管理IV文件系统V设备驱动程序三... 查看详情

12-1课程总结(代码片段)

一、课程内容回顾课程体系(上)1.面试技巧篇2.Python语言篇3.算法与数据结构篇4.编程范式篇5.(Linux)操作系统篇课程体系(下)1.网络编程篇2.数据库篇3.Web框架篇4.系统设计篇5.面试经验总结二、Python基础高频考点P... 查看详情

课程学习总结报告(代码片段)

Linux内核主要由以下几个功能:进程管理、文件系统、IO体系结构和设备驱动程序、内存管理等。一.进程管理在Linux中,进程是系统资源分配的基本单位,也是使用CPU运行的基本调度单位。它实现了对进程的控制和调度。进程管... 查看详情

python课程总结day15(代码片段)

上节课复习​ 1、操作系统发展史​ 批处理系统-》分时操作系统-》multics-》unix->minix->linux->各种linux的发行版(redhat、centos)2、多道技术 空间上的复用 时间上的复用 补充:进程彼此之间的内存空间是隔离的​今日内容... 查看详情

python课程总结day14(代码片段)

linux基础学习学什么???python命令shell命令python解释器:Cpythonshell解释器:bash操作系统操作系统(linux)计算机硬件计算机硬件今日内容:计算机硬件计算机硬件五大组成部分:#1、控制器:计算机的指挥系统。控制器通过地址... 查看详情

课程学习总结报告(代码片段)

一、Linux系统模型  其中最重要的部分是内核,向上为系统调用和应用程序提供支持,向下对硬件资源和驱动程序进行管理。 二、传统I/O操作读写流程  1.用户进程向CPU发起read系统调用读取数据,由用户态切换为内... 查看详情

课程总结(代码片段)

一、课程总结第二周课程总结第三周课程总结第四周课程总结第五周课程总结第六周课程总结第七周课程总结第八周课程总结第九周课程总结第十周课程总结第十一周课程总结第十二周课程总结第十三周课程总结第十四周课程总... 查看详情

《密码安全新技术》课程总结报告(代码片段)

《密码安全新技术》课程总结报告课程学习内容总结第一次课网络(Web)安全与内容安全本次讲座的学习内容主要为两方面:1.Web应用安全SQL注入HavijPangolin1.反射型XSS2.存储型XSSApache解析漏洞Nginx解析漏洞2.隐私安全用户轨迹:移动... 查看详情

oo_unit4总结&课程总结(代码片段)

OO第四单元UML单元总结及课程总结OO_Unit4总结&课程总结本单元的作业是UML图的解析,作业的目的一是进一步强化架构设计能力,学会如何一步步将一个复杂的图结构进行多层解析。二是学习UML这一种强大的形式化语言,熟练掌... 查看详情

面向对象设计与构造课程总结作业(代码片段)

BUAAOO2021THEFINAL面向对象设计与构造课程总结作业四个单元中的架构设计第一单元架构设计与实现相关总结,传送门在此第二单元架构设计与实现相关总结,传送门在此第三单元架构设计与实现相关总结,传送门在此第四单元架构... 查看详情

课程总结(代码片段)

...学期以更加饱满的精力去学习。本学期每周总结:第二周课程总结:https://www.cnblogs.com/wuguijunniubi/p/11497594.html第三周课程总结:https://www.cnblogs.com/wuguijunniubi/p/11520229.html第四周课程总结:https://www.cnblogs.com/wuguijunniubi/p/11557888.html第... 查看详情

2018.9.3cep课程总结(代码片段)

什么是CEP课程?职业生涯规划课程蓝桥介绍立人达人全人教育人文重视人尊重人关心人爱护人人才人格简历的制作找工作的流程?1.简历的准备------>投发简历(自己投、老师帮忙投)主流招聘网站:智联招聘前程无忧拉勾网51job... 查看详情

课程学习总结报告(代码片段)

一、基础知识1、Liunx汇编主要寄存器:EAX、EBX、ECX、EDX、EBP、ESI、EDI、EIP、ESP(其中ESP是堆栈栈顶寄存器,EBP是堆栈基址指证针,EIP寄存器不能直接使用和修改。调用call时会修改EIP指针。EBP和ESP总指向同一个堆栈,EBP指向栈底... 查看详情

课程设计第三次实验总结(代码片段)

1.实验项目名称空战游戏2.实验项目功能描述利用数组进一步该井空战游戏,实现多台敌机,发射散弹等效果;3.项目模块介绍//清屏功能voidHideCuresor()CONSOLE_CURSOR_INFOcursor_info=1,0;SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info... 查看详情