OS的正常工作依赖于存储程序原理、堆栈、中断三个部分。 linux内核从一个初始化上下文环境的函数开始执行,即start_kernel函数,创建多个进程或者fork(创建一个与原来进程几乎完全相同的进程)若干进程,我们为每个进程维护一个进程描述和以及进程间的关系PCB。 当中断发生的时候,如mykernel中就是时钟中断发生之后,接下来OS就会为各进程进行调度,利用Swich_to函数在调度队列中选取出一个适合的进程(系统会根据中断向量号来调用相应的中断异常程序)。由CPU和内核堆栈保存当前进程的各寄存器信息(CPU要做两件工作,一是将当前的eip和esp压入到当前进程的内核栈,二是将esp指向当前进程的内核栈,并将eip指向中断处理入口,进入到内核态。),将eip指向要调度的进程执行的代码区,开始执行。
https://blog.csdn.net/ustc_max/article/details/9189863
我们以一个假设的系统调用xyz
如图,系统调用执行的流程如下:
xyz
,该函数是一个包装系统调用的库函数xyz
;xyz
负责准备向内核传递的参数,并触发软中断以切换到内核态;system_call
;sys_xyz
,真正开始处理该系统调用。
在操作系统内核中维护着一个中断向量表(Interrupt Vector Table),这个数组存储了所有中断处理程序的地址,而中断号就是相应中断在中断向量表中的偏移量。系统调用表同理。
Linux 通过软中断实现从用户态到内核态的切换。用户态与内核态是独立的执行流,因此在切换时,需要准备执行栈并保存寄存器。 内核实现了很多不同的系统调用(提供不同功能),而系统调用处理函数只有一个。 因此,用户进程必须传递一个参数用于区分,这便是系统调用号( system call number )。 在 Linux 中,系统调用号一般通过 eax 寄存器来传递。
分进程创建、可执行文件的加载和进程执行进程切换
注册过程实际上将表示各实际文件系统的 struct file_system_type 数据结构的实例化,然后形成一个链表,内核中用一个名为 file_systems 的全局变量来指向该链表的表头。
当内核被编译时,就已经确定了可以支持哪些文件系统,这些文件系统在系统引导时,在 VFS 中进行注册。如果文件系统是作为内核可装载的模块,则在实际安装时进行注册,并在模块卸载时注销。 每个文件系统都有一个初始化例程,它的作用就是在 VFS 中进行注册,即填写一个叫做 file_system_type的数据结构,该结构包含了文件系统的名称以及一个指向对应的 VFS 超级块读取例程的地址,所有已注册的文件系统的file_system_type结构形成一个链表,为区别后面将要说到的已安装的文件系统形成的另一个链表,我们把这个链表称为注册链表,链表头由 file_systems 变量指定。 所有的数据要加载到内存后CPU才能够对数据进行处理。
每个设备在mount时都要搜索该注册链表,选择适合自己设备文件系统的一项,并从中取出read_super()函数获取设备的超级块(一个超级块对应一个文件系统,保存文件系统的类型、大小、状态等等),并解析其内容。因为每种类型文件系统的超级块的格式不同,并且各自有特定的信息,每种文件系统必须使用对应的解析函数,否则内核就因为不认识该文件系统而无法完成安装。
信息项(有序)是构成文件内容的基本单位,可以是一个字符,也可以是一个记录。系统为一个正在使用的文件分配读/写指针,建立在外存空间,直至删除或到期。 文件分类:源文件(ASCII、汉字)、目标文件(二进制)、可执行文件 文件控制块FCB,文件目录就是FCB的有序集合,Linux中FCB成为inode 超级块,存放已安装的文件系统的信息,存于主存,双向链表
为了避免一切从根文件目录开始,定义了工作/当前目录 硬连接:一个文件名代表了到对应文件的一个硬连接,允许一个文件拥有多个有效路径名(ln,不允许用户创建且需要在同一个文件系统下)。 软连接:符号连接,包含了到另一个文件的任意一个路径名(ln -s),类似快捷方式,方便文件管理,对象可以是不存在的文件名。
根文件系统:开机时自动挂载(类似于钩子)
Linux中文件系统分开放: /home用户存放数据的地方(独立文件系统)、/usr、/var /etc与/home实际上是切换到另一个文件系统 理解:看上去像是所有文件都在根目录下,实际上是目录树的形式挂载,Windows中则是使用同级磁盘CDE等
索引节点inode 保存的其实是实际的数据的一些信息,这些信息称为“元数据”(也就是对文件属性的描述,数据分成:元数据+数据本身 )。例如:文件大小,设备标识符,用户/组标识符,文件读取或修改的时间戳等等。 注意:inode有两种,一种是VFS的inode,一种是具体文件系统的inode。前者在内存中,后者在磁盘中。inode号是唯一的,表示不同的文件。其实在Linux内部的时候,访问文件都是通过inode号来进行的,所谓文件名仅仅是给用户容易使用的。
挂载点 空目录,挂了则不空;原本不空挂载会隐藏原本的文件,取消挂载则重现。任何目录都可以mount挂载一个文件系统,取消挂载umount
文件系统类型EXT4(扩展),也支持Windows下的FAT等。Linux下也可以用mount加载(-o loop) loop设备
创建文件系统(分区)–格式化mkfs sda硬盘,硬盘只有四个主分区,多出的只能作为逻辑分区
/etc/fstab记录自动装载的文件系统,Linux开机只挂载部分文件系统。
用户配额quota 限制用户使用文件大小,软限制(警告)、硬限制(错误)、宽容期(软限制变为硬限制)。/home目录常有,只能针对文件系统设置,不能针对目录。
级别:普通文件、目录、文件系统
https://blog.csdn.net/yuexiaxiaoxi27172319/article/details/45241923
Linux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual Filesystem Switch),是一种软件机制。
三层结构:
中断信号:中断、异常
CPU与内存通过总线连接。 eip/ip指令指针(自加一) cs代码段 CS寄存器对应的段描述(基址)+EIP存放的偏移量,就得到了一个完整的线性地址(完成了段式映射),再通过目录表、页表映射,获得真正的物理地址。
问题: 中断异常处理过程,常见的中断和异常,定时器也是。缺页异常为什么发生? 驱动和文件的关联,设备访问,设备管理。 中断异常系统调用,设备管理。中断怎么存的
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有