Linux操作系统分析课程学习总结

qq_45078991 2022-07-05 23:06:53

一、Linux操作系统分析课程学习总结

本学期有幸选择了孟宁老师和李春杰老师一起授课的Linux操作系统分析,该课程由浅入深,让我更加深入的认识了linux系统的组成和功能包括进程管理,中断和异常等操作系统的核心功能,还认识了x86和ARM64指令集架构等。更通过实验:mykernel和debug mykernel学习了Linux内核的编译和运行,通过实践加深了对理论的认识

二、Linux系统总结

Linux一般有4个主要部分:内核、shell、文件系统和应用程序(app)。Linux的层次结构在硬件支撑的基础上,包括内核、shell和应用等,它们一起使用户可以使用Linux最内层是硬件,硬件是基础,软件的运行必须要以硬件为载体。内核(kernel)是操作系统的核心,它也是一段代码, CPU、内存、硬盘、网络等都要通过内核传递给硬件,Linux负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

1、进程管理

内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出). 不同进程间通讯(通过信号, 管道, 或者进程间通讯原语)对整个系统功能来说是基本的, 也由内核处理. 另外, 调度器, 控制进程如何共享 CPU, 是进程管理的一部分. 更通常地, 内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象.

fork()和execve()

系统调用创建一个几乎和父进程完全一样的子进程。子进程得到与父进程虚拟地址空间的一个副本,即包含的代码段、数据段、运行时堆、用户栈。另外,子进程还获得父进程打开的文件描述符。对应其在内核中的进程描述符task_struct 不完全相同。 两者最大的区别在于:PID即进程标识符不同。

fork函数的主要特点包括:

①fork函数其与其它系统调用不同之处在于其:一次调用,两次返回。在父进程中被调用一次。父进程中fork返回子进程的ID,而在子进程中,返回0 ,基于返回值即可确定是在父进程还是子进程中。

②fork创建完子进程后,两者并发执行。内核依据调度程序交替的执行父子进程中的逻辑流指令。

③相同但独立的地址空间,fork调用创建子进程之初,子进程和父进程的地址空间是相同的。也就意味着两个进程可以访问相同的地址空间内容。相同的代码段,相同的全局变量等。但一旦其中一个进程需要修改地址空间的内容,将触发写时复制(当一个进程修改地址空间内容时,将原先内容拷贝一份,以确保修改是自己私有的地址空间。一个例子:

 

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    pid_t pid;
    int x=1;
    pid=fork();
    if(pid==0)
    {
        printf("child x=%d \n",++x);
        exit(0);
    }
    printf("parent x=%d\n",--x);
    exit(0);
}

执行结果 img

execve系统调用在当前进程上下文中加载并运行一个新的程序,函数加载并运行filename指定的程序,并且可以指定参数列表 argv 以及环境变量 envp当发生错误,找不到文件时,返回到调用程序。fork和execve都是创建新的逻辑执行流,它们的不同之处在于fork创建一个全新的进程,而execve只是在当前进程中加载新的程序。

地址空间新进程PID返回方式 
fork子进程拥有独立的地址空间子进程拥有不同PID返回到父子进程中
execve在原先地址空间上执行仍属于原先进程 PID不变新程序执行完成后返回

2、内存管理

计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的. 内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间. 内核的不同部分与内存管理子系统通过一套函数调用交互, 从简单的 malloc/free 对到更多更复杂的功能.

slab简要介绍:slab是Linux操作系统的一种内存分配机制。其工作是针对一些经常分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,如果直接采用伙伴系统来进行分配和释放,不仅会造成大量的内存碎片,而且处理速度也太慢。而slab分配器是基于对象进行管理的,相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分配器就从一个slab列表中分配一个这样大小的单元出去,而当要释放时,将其重新保存在该列表中,而不是直接返回给伙伴系统,从而避免这些内碎片。slab分配器并不丢弃已分配的对象,而是释放并把它们保存在内存中。当以后又要请求新的对象时,就可以从内存直接获取而不用重复初始化。

3、文件系统 Unix 在很大程度上基于文件系统的概念; 几乎 Unix 中的任何东西都可看作一个文件. 内核在非结构化的硬件之上建立了一个结构化的文件系统, 结果是文件的抽象非常多地在整个系统中应用. 在linux系统中一切皆文件,另外, Linux 支持多个文件系统类型, 就是说, 物理介质上不同的数据组织方式. 例如, 磁盘可被格式化成标准 Linux 的 ext3 文件系统, 普遍使用的 FAT 文件系统, 或者其他几个文件系统.preview

4、设备控制

几乎每个系统操作最终都映射到一个物理设备上. 除了处理器, 内存和非常少的别的实体之外, 全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行. 这些代码称为设备驱动. 内核中必须嵌入系统中出现的每个外设的驱动, 从硬盘驱动到键盘和磁带驱动器.

5、网络

网络必须由操作系统来管理, 因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件. 报文在某一个进程接手之前必须被收集, 识别, 分发. 系统负责在程序和网络接口之间递送数据报文, 它必须根据程序的网络活动来控制程序的执行. 另外, 所有的路由和地址解析问题都在内核中实现.

 

三、参考资料

庖丁解牛Linux操作系统分析 https://gitee.com/mengning997/linuxkernel

414

...全文
256 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-操作系统 发布问题, 以便更快地解决您的疑问

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧