首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 考古笔记

2 流程分析 2.1 引导内核阶段 2.2 内核启动阶段 2.3 init 进程启动 2.4 shell 命令执行 Linux0.11 考古笔记 最近读完《Linux 内核完全注释》和《品读 Linux0.11...核心代码》,大致理解下 Linux0.11 内核的全貌。...关于 Linux0.11 操作系统的进程设计,这里仅侧重理解几个比较重要的概念。...从硬件的角度,堆栈段寄存器和堆栈指针寄存器中设定的值表示当前所使用的堆栈;从软件的角度, Linux0.11 系统中的堆栈包括有:系统初始化的临时堆栈、内核程序的使用堆栈、任务的内核态堆栈、任务的用户态堆栈...2 流程分析 根据《品读 Linux0.11 核心代码》这个专栏,它是按照系统启动到运行的时间顺序结合 Linux0.11 源码来展开的,我根据专栏的内容进行二次整理。

1.1K30

Linux内核学习(一)

前言: 大家好,今天给大家分享一下我个人学习Linux内核的总结,由于新的内核版本太过于庞大,说实话,啃不动,然借鉴前人的建议,故开始从早期的Linux0.11版本开始学习。...为了鲜明的对比早期版本的精简和后期版本的复杂,我们大体从它的目录来做一个对比就可知了: 0.01版本内核目录: 0.11版本内核目录: 前期的版本差别不大,但随着时代的发展,内核功能也扩展的越来越多...,所以就变的复杂起来了: 2.6内核版本目录 上面内核版本的源码可以从下面下载: 在线浏览早期内核源码: http://lxr.linux.no/linux-old 0.11版本的内核源码下载: https...0.11版本Linux内核的组成: 在0.11版本的Linux,它主要是由五个模块组成: 进程调度模块 进程间通信模块 内存管理模块 文件系统模块 网络接口模块 图片参考Linux内核0.11完全注释...文章资料相关参考: Linux内核0.11完全注释 https://www.bilibili.com/video/BV1tQ4y1d7mo?

1K10
您找到你想要的搜索结果了吗?
是的
没有找到

干货|写一个操作系统有多难

一个是它从官网上下载的源码是日语注释的,搞的当时我好多地方还找我朋友帮我翻译。...这一时期的书籍呢,也比较多,我的话是通过《linux 内核设计的艺术》来简单了解 linux 的整个流程和脉络,再通过《linux 内核完全注释》配合着 linux 的源码进行重点源码逐行了解,还通过和一款开源操作系统...但仿写最终放弃了,因为即便是 linux0.11 的源代码,里面都非常复杂,完全仿写还是很费时间的。...linus 这个人太调皮了,好多地方的注释写的大概是这种风格。...我的经历小结 冷启动:《30 天自制操作系统》 初期:《操作系统真相还原》 中期:《linux 内核设计的艺术》《linux 内核完全注释》+ linux0.11 源码 后期:止步 这个系列要写什么 要写一个极简的操作系统教程

1.1K10

Windows下用Bochs编译运行Linux-0.11

学习linux0.11内核,推荐在该模拟器上进行。 环境搭建步骤: 1、下载Linux0.11系统包,本链接的下载包已包含Bochs软件。...由于学习操作系统需要,我们需要在Linux下,编译操作系统以及完成简单的源码修改,从而达到理解Linux内核的能力。接下来,主要演示Linux内核源码的修改,以及内核的编译过程。...内核编译过程: 1、进入/usr/src/linux 目录下,键入命令 cd ../src/linux ,如下图所示: ? ? 2、进行编译,键入命令 make clean 和 make后。...5、回到linux 目录下,重新键入make clean以及 make,完成内核的编译链接。 ? ? 出现上图提示,即表面程序编译成功。...完成编译后,便可以开始修改内核源码,从而达到扩展操作系统功能以及学习操作系统的目的。这里,我们简单修改下,linux操作系统开机启动项bootsect.s源码,让开机后输出个性化的字符串。

3.5K20

操作系统的启动

MBR分区在硬盘上的组织形式大致如下: MBR.png 2, 三方协议 想要把操作系统启动起来,是需要多方按照一定的协议进行协作才能完成的,以Linux0.11,BIOS+MBR分区,Intel80x86CPU...那么BIOS执行后,需要从硬盘或其他地方读取内核的代码,让内核执行起来,这如何做到呢?...如果我们系统安装在硬盘上,就得保证第一扇区是我们的bootsect,这样才可以通过int0x13读取其他扇区的setup和system,从而最终完成内核的启动。...如果我们系统安装在硬盘上,就得保证第一扇区是我们的bootsect,这样才可以通过int0x13读取其他扇区的setup和system,从而最终完成内核的启动。...3, grub 经过多年的发展,引导程序已经由最初像Linux0.11的bootsect.s,setup.s等发展为grub,grub2之类的启动引导程序,第一扇区(主引导记录)也从bootsect.s

1.3K30

为学Linux,我看了这些书

从这本书的名字就能看出来,这本书所讲的内容是“系统编程”,所以,这里涉及的内容是系统调用,是我们的用户进程需要内核的帮助完成我们想要实现的 功能, 这本书我也是从头看到尾,由于书并不是很厚,所以没有花太久的时间...《Linux内核设计的艺术》 ? 这里,我首先引用这本书封面上的一句话–“本书对操作系统内核的驾驭能力和深刻理解程度达到世界顶尖级水平,是一本能真正引导你深入理解Linux内核设计思想的经典著作。”...这本书选择的版本是Linux0.11,书中配合 插图和 文字去分析源代码,起初,我只是看书上的“内容”,并没有分析源代码,不过,渐渐地,我发现一个问题,合上书之后,马上就忘了我看了些什么。...《Linux内核设计与实现》 ? 这本书所讲的内容也是分析Linux内核的,内容比较深,博主现在对这本书的理解也是比较浅显,so,还需努力。...这篇文章写了好长时间了,不过,并没有完全写下我的学习历程,因为,还有很长的路要走。。。

2K70

MIT 6.828 操作系统工程 2018 fall lab1 part3 内核 笔记 and 中文注释源代码阅读

mit 6.828 lab 代码和笔记,以及中文注释源代码已放置在github中: https://github.com/yunwei37/xv6-labs Part 3: The Kernel 内核...使用虚拟内存解决位置依赖性 内核的链接地址(由objdump打印)与加载地址之间存在(相当大的)差异;操作系统内核通常喜欢被链接并在很高的虚拟地址(例如0xf0100000)上运行,以便将处理器虚拟地址空间的下部留给用户程序使用...(内核代码期望在其上运行的链接地址)映射到物理地址0x00100000(引导加载程序将内核加载到物理内存中)。...所以此时要把页面向上滚动一行,即把原来的179号行放到现在的0~78行上,然后把79号行换成一行空格(当然并非完全都是空格,0号字符上要显示你输入的字符int c)。...empty) uint16_t n_desc; // description field uintptr_t n_value; // value of symbol }; 参考 的注释部分

73330

腾讯师弟帅北的编码提升之路!

迷茫的大一 我在大学之前完全没有编程经验,高考后,填的专业前几个也是清一色的传统工科,被软件工程录取纯碎是意外。...当时甚至很担心完全没有编程基础的我,上大学会不会跟不上,还因为考虑过复读,现在想想也是天真。...我一路跟着书写,写到了汇编开机打印出我的名字,再到后来进入 C 语言写内核各个模块,写到内存管理我就中断了,没有继续写下去,这也算个遗憾吧。...当时我真的对这个入迷了,为了写 mini os我还去看了 Linux0.11 的部分代码,看了哈工大李治军老师的 OS 公开课,原因就是哈工大 OS 实验课是用的 Linux 0.11 来魔改。...》、《Linux内核完全注释》、《effecitve C++》 、《effective modern C++》、《程序员自我修养》、《Linux高性能服务端编程》、《Linux多线程服务端编程》(知乎陈硕大佬写的

73021

linux系统的进程管理

:基于0.11内核(修正版V3.0).pdf P299~P300 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8 2、task_struct 进程的状态...>state = TASK_RUNNING; /* do this last, just in case */ 返回新创建进程的 pid return last_pid; 具体详细内容参考Linux内核完全注释...:基于0.11内核(修正版V3.0).pdf P242~P252 和 P325~P333 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8 进程被创建到了链表中...:基于0.11内核(修正版V3.0).pdf P281~P302 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8 四、进程的退出 linux内核代码中以...:基于0.11内核(修正版V3.0).pdf P319~P325 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8

9910

为什么要阅读Linux内核源码以及如何阅读Linux内核源码

获取内核源码: https://www.kernel.org/ 阅读linux内核,常用下面两种方法: bochs+linux0.11+书(linux内核完全注释、linux内核完全剖析、linux内核设计的艺术...《linux内核完全剖析》《linux内核完全注释》是引导你横向阅读的书,《linux内核设计的艺术》是引导你纵向阅读的书。...《linux内核情景分析》中的内核版本是2.4.X,现代内核版本还是推荐横向阅读,纵向几乎不可能。...市面上能见到的其它的Linux内核的图书,《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核分析及编程》等。   ...《Linux内核源代码完全注释》(机械工业出版社)是同济大学的博士生赵炯的著作,讲解0.1Linux内核,我没买也没看,有看过的朋友说一说。

4.2K30

操作系统进程的实现---中---05

操作系统进程的实现---中---05 内核级线程实现 核心级线程的两套栈,核心是内核栈… 整个故事要从进入内核开始——某个中断开始… 切换五段论中的中断入口和中断出口 switch_to难点分析 另一个故事...即_schedule函数执行: 通过相关调度算法,找出切换到哪个线程继续执行 switch_to完成具体切换,主要是完成对内存级线程PCB的切换 ---- switch_to难点分析 参考: Linux0.11...tmp.a), "m" (*&__tmp.b), / 13 "m" (last_task_used_math),"d" _TSS(n), "c" ((long) task[n])); / 14 } 注释...首先,新创建的内核级线程的内核栈使用的是上面申请的PCB内存中的一部分: 对于申请的空闲页来说,下面是PCB内存,上面是内核栈 tss.ss0指向的是内核数据段 ---- 对于用户栈来说...,需要将当前线程的TSS状态都初始化好 通过内核栈完成切换 如果是通过内核栈完成内核级线程的切换,在具体切换时,只需要切换TCB即可,因为在进入中断的时候,就已经将当前各种寄存器的状态压入了内核栈中,

77060

天天当键盘侠,你知道从按键到响应的底层原理吗?

linux0.11版本的键盘中断服务程序的框架源码如下图所示: ?...这个框架程序主要做了以下事情: 保护现场——压栈 上文中写到压栈ss, esp, eflags, cs, eip, error_code (若有特权级变化且中断带有错误码) 来保存现场,那只是CPU自动执行的部分,完全保存原任务的信息还是在中断处理程序中进行的...如上图所示,键盘中断服务程序里通用寄存器只保存了4个,eax, ebx, ecx, edx,若为了省事不追求效率完全可以无脑操作pushad压栈所有的通用寄存器,但人家是Linux系统嘛,虽然只是0.11...04 键处理程序 键的扫描码有通码和断码,有着不同的处理,主要的键处理程序我分为了以下几类(各点开头出现的名字都是Linux0.11中实际键处理程序的函数名称): 1、 ctrl,alt,caps,shift

1.1K30

【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

文章目录 一、CFS 调度器概念 ( 完全公平调度器 ) 二、CFS 调度器虚拟时钟概念 ( Virtual Runtime ) 三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级...Fair Scheduler ) 是 " 完全公平调度器 " , " 完全公平调度算法 " 对每个 进程 都是 公平 的 , " 完全公平调度算法 " 是 基于时间片轮询 的 调度算法 , 每个进程 都会获得一段...虚拟时钟 会增加 n 时长 , 其它 没有执行的进程 虚拟时钟 值保持不变 ; 三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级 ) ---- 参考 【Linux 内核...const struct sched_class *sched_class; 源码地址 : linux-5.6.18\include\linux\sched.h#680 上述可设置的调度类参考 【Linux 内核...调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类 | 公平调度类 | 空闲调度类 ) 博客 , 在 Linux 内核

1.7K40
领券