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

teresa-chenchen teresa-chenchen     2022-12-06     576

关键词:

Linux内核主要由以下几个功能:进程管理、文件系统、IO体系结构和设备驱动程序、内存管理等。

一.进程管理

在Linux中, 进程是系统资源分配的基本单位,也是使用CPU运行的基本调度单位。它实现了对进程的控制和调度。

进程管理的核心功能大致分为四类:控制,同步,通信,调度。

1.进程控制包括

进程的创建、进程的终止、进程的阻塞与唤醒;

2.进程调度:先到先服务算法、最短作业优先调度、优先级调度、 轮转法调度、多级队列调度、多级队列反馈调度等。

一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。

一个进程的执行是在进程的上下文中执行。

当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。

当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。

 

二.中断管理

1.广义中断分为中断(也称硬件中断)和异常(也称软件中断)。

1.1中断来自来自 I/O 设备的信号,分为可屏蔽中断和不可屏蔽中断。

1.2异常分为陷阱 (trap),故障 (fault),终止 (abort)。

陷阱是有意的异常,如系统调用。故障是潜在可恢复的错误,如缺页异常,除0操作。

什么是(硬件)中断上半部和下半部?

将硬件中断处理分离成"上半部"和"下半部"两个阶段的机制:上半部指的是中断处理程序,在屏蔽中断的上下文中运行,用于完成关键性的处理动作;下半部指一种推后执行任务,不在中断服务上下文中执行。通常,下半部会在中断处理程序返回时立即执行。

软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"(《Linux内核源代码情景分析》第三章)。

软中断
1.通常是硬中断服务程序对内核的中断;
2.为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。
3. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。

硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

硬中断是可屏蔽的,软中断不可屏蔽。硬中断处理程序称为上半部。
软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

进程上下文是把系统提供给进程的处于动态变化的运行环境总和。

中断上下文它是一个内核控制路径,代表了中断发生时正在运行的进程执行。

//系统调用属于异常处理程序,运行在进程上下文。

//系统调用是通过叫software interruppt的软件中断(一种异常)来实现的,跟软中断(softirq)没有关系。

系统调用的过程:

  1. 应用程序代码调用系统调用xyz,该函数是一个包装系统调用的库函数xyz
  2. 库函数xyz负责准备向内核传递的参数,并触发软中断以切换到内核态;
  3. CPU 被软中断打断后,执行中断处理函数 ,即系统调用处理函数system_call
  4. 系统调用处理函数调用系统调用服务例程sys_xyz,真正开始处理该系统调用。

三.文件系统

在Linux中,一切都是文件,通过对文件的定义和操作来控制设备的执行和数据的存储。并且使用VFS虚拟文件系统,实现对多种文件系统的兼容。

要实现操作系统对其它各种不同文件系统的支持,就要将对各种不同文件系统的操作和管理纳入到一个统一的框架中。 对用户程序隐去各种不同文件系统的实现细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统(VFS)。

Linux支持多种文件系统,包括ext2、ext3、 vfat、 ntfs、 iso9660、 jffs、 romfs和nfs等,为了对各类文件系统进行统一管理, Linux引入了虚拟文件系统VFS。

虚拟文件系统 VFS:

  • 是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。
  • 是用户应用程序与文件系统实现之间的抽象层能为各种文件系统提供一个通用的、统一的接口

技术图片

 

 

 

 

文件打开流程:

    (1)打开文件即使用 open 函数,它首先通过按名查找,看在高速缓存中有没有查找的 inode,如果有那么对其进行引用并加 1。如果没有将创建新的 vfs的 inode 对象和目录项对象等;

    (2)Open 函数调用的系统服务例程是 sys_open 函数,其接受的参数为文件目录和访问的模式。如果文件存在则返回一个文件描述符fd,如果不存在则返回-1.;

    (3)Read 和write 函数分调用的服务例程是 sys_read 和 sys_write,接受三个参数。分别是一个文件描述符 fd,一个对数据缓存的地方buf,和需要传输的数据的多少 count。Read 对将文件读入缓存区。Write 则相反。

文件关闭流程:

    (1)用户程序通过close ( )系统调用关闭打开的文件,该函数接收的参数为要关闭文件的文件描述符;

    (2)内核调用sys_close ( )函数。

读文件的过程:

  1. 进程调用库函数向内核发起读文件请求;

  2. 内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;

  3. 调用该文件可用的系统调用函数read()。read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;

  4. 在inode中,通过文件内容偏移量计算出要读取的页;

  5. 通过inode找到文件对应的address_space;

  6. 在address_space中访问该文件的页缓存树,查找对应的页缓存结点:

    • 如果页缓存命中,那么直接返回文件内容;

    • 如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页;重新进行第6步查找页缓存;

  7. 文件内容读取成功。

 

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

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

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

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

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

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

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

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

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

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

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

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

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

目录一、linux系统概念模型1.概述2.函数调用函数调用过程概述函数调用中的硬件操作函数调用中的软件操作3.中断和异常中断和异常的区别与联系:中断上下文中断和异常的硬件级处理中断和异常的软件级处理4.系统调用5.进程管... 查看详情

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

从存储程序计算机到冯诺依曼体系结构存储程序计算机的主要思想是将程序存放在计算机存储器中,然后按存储器中的存储程序的首地址执行程序的第一条指令,以后就按照该程序中编写好的指令执行,直至程序执行结束。冯诺... 查看详情

第九周课程总结&实验报告(代码片段)

第九周课程总结&实验报告(七)实验任务详情:要求:(1)总票数1000张;(2)10个窗口同时开始卖票;(3)卖票过程延时1秒钟;(4)不能出现一票多卖或卖出负数号票的情况。实验代码:packageproject7;classMyThreadimplementsRunna... 查看详情

第九周课程总结&实验报告(代码片段)

实验内容:源代码:主类:packageexercise;publicclassTrainStationTicketSalesimplementsRunnableprivateintticket=1000;publicvoidrun()for(inti=0;i<1000;i++)this.sale();ticket--;publicsynchronizedvoidsale()if(ticket>=0)tryThread.sleep(100);catch(InterruptedExceptione)e.printStackTrace();... 查看详情

第九周课程总结&实验报告(代码片段)

课程总结1、继承Thread类创建线程:Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法... 查看详情

第八周课程总结&实验报告(代码片段)

实验报告六编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明... 查看详情

第八周课程总结&实验报告(代码片段)

第八周课程总结&实验报告(六)一、实验目的(1)理解异常的基本概念;(2)掌握异常处理方法及熟悉常见异常的捕获方法。二、实验要求(1)练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用(2)掌... 查看详情

第七周课程总结及实验报告(代码片段)

(一)设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。继承该抽象类定义三角型、矩形、圆。分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c))其... 查看详情

第七周课程总结&实验报告(代码片段)

第七周课程总结&实验报告(五)实验四类的继承实验目的理解抽象类与接口的使用;了解包的作用,掌握包的设计方法。实验要求掌握使用抽象类的方法。掌握使用系统接口的技术和创建自定义接口的方法。了解Java系统包的... 查看详情

第八周课程总结&实验报告(代码片段)

第八周课程总结&实验报告(六)实验六 Java异常实验目的理解异常的基本概念;掌握异常处理方法及熟悉常见异常的捕获方法。实验要求练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。掌握自定义... 查看详情

第七周课程总结&实验报告(代码片段)

第七周课程总结一、接口的实际应用接口在实际中更多的作用是用来制定标准的。抽象类和接口的的关系No.区别点抽象类接口1定义包含一个抽象方法的类抽象方法和全局常量的集合2组成构造方法、抽象方法、普通方法、常量、... 查看详情

第七周课程总结及实验报告(代码片段)

实验报告(一)抽象类的使用1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。继承该抽象类定义三角型、矩形、圆。分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。注:三角... 查看详情