随笔分类 -  操作系统笔记

极客时间--操作系统实战45讲https://time.geekbang.org/column/article/369502
摘要:进程加工处理的数据就是进程的劳动成果,这个“劳动成果”如何表示、如实组织、又放在哪里呢?这些问题都会在讲解文件系统的过程中得到解答 先来搞清楚什么是文件系统,然后解决文件系统如何组织文件,最后对文件系统进行设计并抽象成数据结构。 什么是文件系统 我们经常在计算机上听 APE 音乐、看 4K 视频、阅 阅读全文
posted @ 2022-06-12 18:04 牛犁heart 阅读(1342) 评论(0) 推荐(0) 编辑
摘要:本节了解下Linux是如何管理设备的,将从Linux如何组织设备开始,然后研究设备相关的数据结构,最后写一个Linux设备驱动实例。 感受一下Linux下的设备信息 Linux的设计哲学是一起皆是文件,各种设备在Linux系统下都是一个个文件,但这个文件并不对应磁盘上的数据文件,而是对应存在内存当中 阅读全文
posted @ 2022-06-11 19:47 牛犁heart 阅读(2878) 评论(0) 推荐(0) 编辑
摘要:操作系统:设备I/O -- 设备如何处理内核I/O包上一讲实现了建立设备的接口,相当于制定了部门的相关法规,只要遵循这些法规就能建立一个部门。一个部门的职责不难确定,它应该能对上级下发的任务作出响应,并完成相关工作,而这对应到设备,就是如何处理内核的I/O包。 首先,需要搞清楚什么是I/O包,然后实现内核向设备发送I/O包的工作,最后完成一个驱动实例 阅读全文
posted @ 2022-06-11 18:34 牛犁heart 阅读(101) 评论(0) 推荐(0) 编辑
摘要:在上节课里,我们对设备进行了分类,建立了设备与驱动的数据结构,同时也规定了一个驱动程序应该提供哪些标准操作方法,供操作系统内核调用。这相当于设计了行政部门的规章制度,一个部门叫什么,应该干什么,这些就确定好了。 本节继续探索部门的建立,也就是设备在内核中是如何注册的。我们先从全局了解一下设备的注册流 阅读全文
posted @ 2022-06-11 09:59 牛犁heart 阅读(316) 评论(0) 推荐(0) 编辑
摘要:计算机的结构 计算机结构示意图: 主板上的各种芯片并非独立存在,而是以总线为基础连接在一起的,各自完成自己的工作,又能相互打配合,共同实现用户要求的功能。 如何管理设备 前面的学习中宏,实现了管理内存和进程,其实进程从正面看它是管理应用程序的,反过来看它也是管理CPU的,它能使CPU的使用率达到最大 阅读全文
posted @ 2022-06-10 07:48 牛犁heart 阅读(358) 评论(0) 推荐(0) 编辑
摘要:Linux如何表示进程 在Cosmos中,设计了一个thread_t数据结构来代表一个进程,Linux也同样是用一个数据结构表示进程。 Linux进程的数据结构 在Linux系统下,把运行中的应用程序抽象成一个数据结构task_struct,一个应用程序所需要的各种资源,如内存、文件等都包含在tas 阅读全文
posted @ 2022-06-10 07:09 牛犁heart 阅读(778) 评论(0) 推荐(0) 编辑
摘要:上节我们设计了Cosmos的进程调度器,但只有进程调度器是不够的,因为调度器它始终只是让一个进程让出CPU,切换到它选择的下一个进程上去。 结合进程生命周期,在多进程调度方面,还需要实现进程的等待与唤醒机制 进程的等待与唤醒 进程得不到所需的资源时就会进入等待状态,直到这种资源可用,才会被唤醒。那进 阅读全文
posted @ 2022-06-09 07:44 牛犁heart 阅读(637) 评论(0) 推荐(0) 编辑
摘要:为什么需要多进程调度 1、CPU 同一时刻只能运行一个进程,而 CPU 个数总是比进程个数少,这就需要让多进程共用一个 CPU,每个进程在这个 CPU 上运行一段时间。 2、当一个进程不能获取某种资源,导致它不能继续运行时,就应该让出 CPU。 也可将第1点中的CPU时间视为一种资源,这样可以合并成 阅读全文
posted @ 2022-06-07 23:26 牛犁heart 阅读(843) 评论(0) 推荐(0) 编辑
摘要:本节将了解操作系统里一个层次非常高的组件--进程,它非常依赖于内存管理、中断、硬件体系结构 在Linux终端中输入ps命令,就可以看到系统中有多少个进程,它会打印出具体进程的数据,如创建进程和用户、进程ID、使用CPU的百分比,进程运行状态,进程的建立时间、进程的运行时间、进程名等,这些数据综合起来 阅读全文
posted @ 2022-06-05 23:40 牛犁heart 阅读(316) 评论(0) 推荐(0) 编辑
摘要:在Linux系统中比页更小的内存对象要怎么分配呢? -- SLAB,学习下SLAB分配器的原理和实现 SLAB 与Cosmos物理页面管理器一样,Linux中的伙伴系统是以页面为最小单位分配到,现实更多要以内核对象为单位分配内存,其实更具体一点说,就是根据内核对象的实例变量大小来申请和释放内存空间, 阅读全文
posted @ 2022-06-04 23:09 牛犁heart 阅读(530) 评论(0) 推荐(0) 编辑
摘要:在Linux系统中,用来管理物理内存页面的伙伴系统,以及负责分配比页更小的内存对象的SLAB分配器 本节先讲解Linux是如何管理内存页面的,何为伙伴系统 ###伙伴系统 伙伴系统源于 Sun 公司的 Solaris 操作系统,是 Solaris 操作系统上极为优秀的物理内存页面管理算法。 那 Li 阅读全文
posted @ 2022-06-04 22:43 牛犁heart 阅读(777) 评论(0) 推荐(0) 编辑
摘要:上节课,已经建立了虚拟内存的开始流程,本节将来实现虚拟内存的核心功能:写出分配、释放虚拟地址空间的代码,最后实现虚拟地址空间到物理地址空间的映射。 ###虚拟地址的空间的分配与释放 整个虚拟地址空间是由一个个虚拟地址区间组成,那分配一个虚拟地址空间就是在整个虚拟地址空间分割出一个区域,而释放一块虚拟 阅读全文
posted @ 2022-06-04 16:31 牛犁heart 阅读(582) 评论(0) 推荐(0) 编辑
摘要:一个应用往往拥有很大的连续地址空间,并且每个应用都是一样的,只有在运行时才能分配到真正的物理内存,在操作系统中这称为虚拟内存。 那操作系统要怎样实现虚拟内存呢?这节课,我们先进行虚拟地址空间的划分,搞定虚拟内存数据结构的设计,下节来实现虚拟内存的核心功能。 ###虚拟地址空间的划分 虚拟地址就是逻辑 阅读全文
posted @ 2022-06-04 15:54 牛犁heart 阅读(220) 评论(0) 推荐(0) 编辑
摘要:我们建立了物理内存页面管理器,它既可以分配单个页面,也可以分配多个连续的页面,还能指定在特殊内存地址区域中分配页面。 但物理内存页面管理器一次分配至少一个页面,而对内存分页也是一个页面4K,即4096字节,对于小于一个页面的内存分配请求,它无能为力,那如果要实现小于一个页面的内存分配请求,要怎么办呢 阅读全文
posted @ 2022-06-04 10:19 牛犁heart 阅读(174) 评论(0) 推荐(0) 编辑
摘要:本节将依赖前面建好的数据结构,实现内存页面管理算法 ###内存页的分配 如果让实现一次只分配一个页面,那只需要写一个循环代码,在其中遍历出一个空闲的msadsc_t结果,就可以返回了,这个算法就结束了, 但内存管理器要为内核、驱动,还有应用提供服务,它们对请求内存页面的多少、内存页面是不是连续,内存 阅读全文
posted @ 2022-06-02 23:09 牛犁heart 阅读(385) 评论(0) 推荐(0) 编辑
摘要:上节确定了使用分页方式管理内存,并且设计了表示内存页、内存区相关的内存管理数据结构,但还没有在内存中建立相应的实体变量 本节将讲解在内存中建立数据结构对应的实例变量,搞定内存页的初始化问题。 ###初始化 在前面的课程中,在hal层初始化中,初始化了从二级引导器中获取的内存布局信息,即e820map 阅读全文
posted @ 2022-06-02 07:46 牛犁heart 阅读(361) 评论(0) 推荐(0) 编辑
摘要:本节先解决内存的划分方式和内存页的表示、组织问题,设计好数据结构 ###分段还是分页 从内存管理角度,分析分段和分页的优缺点: 第一点 从表示方式和状态确定角度考虑。 段的长度大小不一,用什么数据结构表示一个段,如何确定一个段已经分配还是空闲呢?而页的大小固定,我们只需用位图就能表示页的分配与释放。 阅读全文
posted @ 2022-05-31 23:07 牛犁heart 阅读(518) 评论(0) 推荐(0) 编辑
摘要:本节树立启动的整体流程,重点解读Linux上GRUB是怎样启动,以及内核里的“实权人物”-- vmlinuz内核文件是如何产生和运转的。 ###全局流程 在机器加电后,BIOS会进行自检,然后由BIOS加载引导设备中引导扇区。在安装有Linux操作系统的情况下,在引导扇区里,通常是安装的GRUB的一 阅读全文
posted @ 2022-05-29 23:09 牛犁heart 阅读(650) 评论(0) 推荐(0) 编辑
摘要:前面我们为调用Cosmos 的第一个C函数hal_start做了大量的工作,本节要让操作系统Cosmos里的第一个C语言真正跑起来。 继续在hal_start函数里,首先执行板级初始化,其实就是hal层(硬件抽象层,下同)初始化,其中执行了平台初始化、hal层的内存初始化、中断初始化,最后进入到内核 阅读全文
posted @ 2022-05-29 22:26 牛犁heart 阅读(261) 评论(0) 推荐(0) 编辑
摘要:上一节讲道二级引导器不做具体的加载任务,而是主要解析内核文件、收集机器环境信息,那具体做些什么事呢? 在二级引导器中,要检查CPU是否支持64位的工作模式、收集内存布局信息,查看是不是符合我们操作系统的最低运行要求,还要设置操作系统需要的MMU页表、设置显卡模式、释放中文字体文件等。 ###检查与收 阅读全文
posted @ 2022-05-29 10:48 牛犁heart 阅读(295) 评论(0) 推荐(0) 编辑