27、瞧一瞧Linux:Linux如何实现进程与进程调度

你好,我是LMOS。 在前面的课程中,我们已经写好了Cosmos的进程管理组件,实现了多进程调度运行,今天我们一起探索Linux如何表示进程以及如何进行多进程调度。 好了,话不多说,我们开始吧。 Linux如何表示进程在Cosmos中,我们设计了一个...

操作系统实战45讲

26、多个活动要安排(下):如何实现进程的等待与唤醒机制

你好,我是LMOS。 上节课,我带你一起设计了我们Cosmos的进程调度器,但有了进程调度器还不够,因为调度器它始终只是让一个进程让出CPU,切换到它选择的下一个进程上去运行。 结合前面我们对进程生命周期的讲解,估计你已经反应过来了。没错,多进程调度...

操作系统实战45讲

25、多个活动要安排(上):多进程如何调度

你好,我是LMOS。 上节课,我们了解了什么是进程,还一起写好了建立进程的代码。不知道你想过没有,如果在系统中只有一个进程,那我们提出进程相关的概念和实现与进程有关的功能,是不是就失去了意义呢? 显然,提出进程的目的之一,就是为了实现多个进程,使系统...

操作系统实战45讲

24、活动的描述:到底什么是进程

你好,我是LMOS。 在前面的课程里,我们已经实现了数据同步、hal层的初始化,中断框架、物理内存、内存对象、虚拟内存管理,这些都是操作系统中最核心的东西。 今天,我再给你讲讲操作系统里一个层次非常高的组件——进程,而它又非常依赖于内存管理、中断、硬...

操作系统实战45讲

23、瞧一瞧Linux:SLAB如何分配内存

你好,我是LMOS。 上节课我们学习了伙伴系统,了解了它是怎样管理物理内存页面的。那么你自然会想到这个问题:Linux系统中,比页更小的内存对象要怎样分配呢? 带着这个问题,我们来一起看看**SLAB分配器的原理和实现。**在学习过程中,你也可以对照...

操作系统实战45讲

22、瞧一瞧Linux:伙伴系统如何分配内存

你好,我是LMOS。 前面我们实现了Cosmos的内存管理组件,相信你对计算机内存管理已经有了相当深刻的认识和见解。那么,像Linux这样的成熟操作系统,又是怎样实现内存管理的呢? 这就要说到Linux系统中,用来管理物理内存页面的伙伴系统,以及负责...

操作系统实战45讲

21、土地需求扩大与保障:如何分配和释放虚拟内存

你好,我是LMOS。 今天,我们继续研究操作系统如何实现虚拟内存。在上节课,我们已经建立了虚拟内存的初始流程,这节课我们来实现虚拟内存的核心功能:写出分配、释放虚拟地址空间的代码,最后实现虚拟地址空间到物理地址空间的映射。 这节课的配套代码,你可以点...

操作系统实战45讲

20、土地需求扩大与保障:如何表示虚拟内存

你好,我是LMOS。 在现实中,有的人需要向政府申请一大块区域,在这块区域中建楼办厂,但是土地有限且已经被占用。所以可能的方案是,只给你分配一个总的面积区域,今年湖北有空地就在湖北建立一部分厂房,明年广东有空地就在广东再建另一部分厂房,但是总面积不变...

操作系统实战45讲

19、土地不能浪费:如何管理内存对象

你好,我是LMOS。 在前面的课程中,我们建立了物理内存页面管理器,它既可以分配单个页面,也可以分配多个连续的页面,还能指定在特殊内存地址区域中分配页面。 但你发现没有,物理内存页面管理器一次分配至少是一个页面,而我们对内存分页是一个页面4KB,即4...

操作系统实战45讲

18、划分土地(下):如何实现内存页的分配与释放

你好,我是LMOS。 通过前面两节课的学习,我们已经组织好了内存页,也初始化了内存页和内存区。我们前面做了这么多准备工作,就是为了实现分配和释放内存页面,达到内存管理的目的。 那有了前面的基础,我想你自己也能大概实现这个分配和释放的代码。但是,根据前...

操作系统实战45讲