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

Linux内核V0.01,仅 8670 行代码

他最初的目标只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。他将这个内核发布在Internet上,并开放源代码。随着全球各地的程序员参与开发,内核变得更加完善和稳定。...地址: https://seiya.me/blog/reading-linux-v0.01 解读Linux内核第一版(V0.01)仅 8670 行代码 截止发文,最新版Linux内核是 v6.5-rc7...然而,在1991年的第一版(V0.01Linux内核只有8670行代码,包含注释才10239 行,可以说非常的“小巧”。 v0.01系统调用是什么样的?...Tanenbaum就操作系统设计进行了一场非常著名的辩论:单片内核,哪个设计更好?...LINUX80x86紧密相连。不是要走的路。 确实如此。Linux v0.01 针对 i386 进行了深度硬编码。

12110

linux内核设计实现

一. linux内核简介 1. linux简介 1.1 unix的特点 unix很简洁,仅提供几百个系统调用,并有非常明确的设计目的 unix所有东西都当作文件对待,这种抽象使对数据和设备都通过一套相同的系统调用接口进行...内核用C语言编写,移植能力很强 进程创建迅速,独特的fork调用 提供了简洁但是稳定的进程间通讯原语 1.2 unix和linux linux克隆unix,但不是unix linux借鉴了unix很多的设计...,并且实现了 unix的api linux没有直接使用unix的源代码,但完整表达了unix的设计目标并保证编程接口一致 2....Unix其他变体和大部分操作系统,不支持内核抢占,内核代码需要一直执行直到完成 2.6版本内核中,添加了内核抢占。...,存储在sys_call——table中,以体系结构有关 linux内核设计优化简洁,上下文切换时间极快,操作系统执行效率高 2.

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

Linux 内核】宏内核内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

文章目录 一、操作系统需要满足的要素 二、宏内核 三、微内核 四、Linux 内核动态加载机制 一、操作系统需要满足的要素 ---- 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要...- 微内核 : 将 操作系统 拆分成 多个 独立功能模块 , 这些 独立功能模块 之间通过 " 消息 " 进行通信 , 微内核 效率低 ; 下图中 , 进程 , 文件系统 , 设备驱动 , 内核...; 四、Linux 内核动态加载机制 ---- Linux 内核模块动态加载 : Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ; Linux 内核的 核心实现 , 设备驱动实现..., 都可以 编译成动态 加载 / 卸载 的模块 , 驱动开发时 , 必须 遵守规定的接口 , 来访问内核 , 这样 开发内核模块 , 变得 更加容易 , 方便 ; 平台无关 : 内核模块 可以 设计成... 平台无关的 模块 , 如 : 文件系统 ;

4.1K30

Linux 内核空间用户空间实现分析

针对 Linux 操作系统而言,最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF)由内核使用,称为内核空间。...对于 Linux 来说,通过区分内核空间和用户空间的设计,隔离了操作系统代码(操作系统的代码要比应用程序的代码健壮很多)应用程序代码。...即便是单个应用程序出现错误也不会影响到操作系统的稳定性,这样其它的程序还可以正常的运行(Linux 可是个多任务系统啊!)。 所以,区分内核空间和用户空间本质上是要提高操作系统的稳定性及可用性。...所以说,Linux 中每个进程有两个栈,分别用于用户态和内核态。 下图简明的描述了用户态内核态之间的转换: ?...其实,不光是 Linux,Windows 操作系统设计也是大同小异。 总结 现代的操作系统大都通过内核空间和用户空间的设计来保护操作系统自身的安全性和稳定性。

3.1K30

Linux内核设计实现》第3版

Linux内核设计实现》第3版,英文版已经出版,中文版即将出版。...本书基于linux 2.6介绍了linux内核设计实现,涵盖了从核心内核系统的应用到内核设计实现等各方面内容,主要内容包括:进程管理、调度、时间管理和定时器、系统调用接口、内存寻址、内存管理、页缓存...本书详细描述了linux内核的主要子系统和特点,包括其设计、实现和接口,既介绍理论也讨论具体应用,填补了linux内核理论和实践细节之间的鸿沟。...能够带领读者快速走进linux内核世界,真正开发内核代码。     如果你是一名linux内核爱好者,本书的内容可以帮助你大显身手。如果你是一名普通程序员,本书的内容将会拓宽你的编程思路。...本版新增内容: ·增加一章专门描述内核数据结构 ·详细描述中断处理程序 ·扩充虚拟内存和内存分配的内容 ·调试linux内核的技巧 ·内核同步和锁机制的深度描述 ·提交内核补丁以及参与linux

1.8K20

读书笔记|Linux内核设计实现

这本书属于学习Linux内核原理必读推荐书目之一!...对Linux内核设计原理进行了细致的说明,也有具体实现部分的介绍,结合源码能很好的理解Linux内核; 在简单翻了一遍之后,带着如下几个疑问,整理了下相关知识点: 1、内核是什么时候加载运行的; 2、...根据《Linux内核设计实现》说明,CPU在某个任何特定的时间点上的活动必然概括为下列三种之一: 运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定的进程执行; 运行于内核空间...,处于中断上下文,内核进程无关处理某个特定的终端; 驱动程序应用程序的区别  1、应用程序以main开始,驱动程序没有main,它以一个模块初始化函数作为入口。 ...linux操作系统为什么分为用户态和内核态,简单以一句话是为了安全, 在CPU的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。

1K20

Linux内核分析内核编程

Linux操作系统,如Red hat Linux 9,被广泛地应用于PC、服务器,还广泛地用于手机、PDA等高端嵌入设备。...第2章“进程及进程调度”分析了进程结构及进程调度算法。 第3章“内核同步机制”介绍了内核的互斥机制:自旋锁、原子操作和信号量。还说明了RCU读写机制,及内核用户空间进行通信的机制。...第18章“内核配置编译”说明了内核的配置、配置语言的语法,还分析了makefile是如何进行内核编译的。...Linux操作系统,如Red hat Linux 9,被广泛地应用于PC、服务器,还广泛地用于手机、PDA等高端嵌入设备。...第18章“内核配置编译”说明了内核的配置、配置语言的语法,还分析了makefile是如何进行内核编译的。

11.3K20

操作系统存储:解析Linux内核全新异步IO引擎io_uring设计实现

更好的解决方案是通过怎样的设计和实现解决问题? ... 2019年,Linux Kernel正式进入5.x时代,众多新特性中,存储领域相关度最高的便是最新的IO引擎——io_uring。...另外,因为我们的部分目标之间,本质上往往是存在一定互斥性的(如可伸缩足够简单互斥、特性丰富高效互斥)很难同时满足,所以,我们设计时也需要权衡。其中,io_uring始终需要围绕高效进行设计。...我们发现,两者通信,不是必须要拷贝,通过现有技术,可以让应用内核共享内存,用于彼此通信,需要生产者-消费者模型。...要实现核外内核的零拷贝,最佳方式就是实现一块内存映射区域,两者共享一段内存,核外往这段内存写数据,然后通知内核使用这段内存数据,或者内核填写这段数据,核外使用这部分数据。...,这是一个很明显的优化,内核核外的切换极其耗时。

2.2K11

Linux 内核架构分析

概述 通常地,Linux操作系统如下图所示,由四大子系统组成: 用户应用层: 特定Linux系统上使用的应用程序集会有所不同,具体取决于计算机系统的用途,但典型示例包括文字处理应用程序和Web浏览器,...O/S 服务层: O/S服务通常被认为是操作系统的一部分(窗口系统,命令外壳等);此外,该子系统还包含内核的编程接口(编译器工具和库d) Linux内核层:这是本文关注的主要子系统,内核抽象并调控对硬件资源...最后,任务数据结构还包含指向数据结构的指针,该数据结构表示每个任务关联的所有打开的网络连接。 3.各子系统架构分析 3.1 进程调度器架构 进程调度器是Linux内核中最重要的子系统。...这不仅包括用户进程的访问,还包括其他内核子系统的访问。 由上图可知,进程调度器可分为四大模块: 调度策略模块负责判断哪个进程可以访问CPU;设计该策略是为了使进程可以公平地访问CPU。...体系结构相关模块特定于体系结构的模块设计有一个公共接口,用于抽象任何特定计算机体系结构的详细信息。这些模块负责CPU通信以挂起和恢复进程。

2.7K30

Linux内核Crash分析

在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。...对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在一个单独为进程分配的存储空间中:一个是内核态的进程堆栈,另一个是紧挨进程描述符的数据结构thread_info,叫线程描述符。...在Linux-2.6.32内核中thread_info.h文件中有对内核堆栈的定义: #define THREAD_SIZE 8192 在Linux内核中使用下面的联合结构体表示一个进程的线程描述符和内核栈...,在内核中文件include/linux/sched.h。...bust_spinlocks(0); do_exit(SIGKILL); } (2) 对于下面的两个信息,在函数show_pte中进行了打印,下面的打印涉及到了页全局目录,页表的知识,暂时先不分析

4.4K20

Linux内核分析》之操作系统是如何工作的 实验总结

/mykernel_for_linux3.9.4sc.patch 6、make allnoconfig 复位 7、make 编译 8、安装qemu 9、使用qemu查看内核 10、结合网上所查资料,在mykernel...之后再在linux-3.9.4文件夹中make 编译一下。 11、使用qemu再次查看内核,正常情况下应该可以看到更改后的。...小总结:1-7步是编译linux内核过程,8-9为查看内核信息的过程,10-11为编写自己的简易内核过程。 相关图片 ? mymain.c部分截图 ? 代码粘进去严重错位了= = ?...linux内核工作状态 实验及总结  主要代码及分析 各文档所包含的头文件不在列出 mypcb.h 这个头文件主要定义了进程控制结构PCB mypcb.h #define MAX_TASK_NUM 4...3、/*$1f是指接下来的标号1:的位置*/ windCoder原创作品转载请注明出处 参考资料 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC

1.8K31

Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

文章目录 一、查看 Linux 操作系统位数 二、查看 Linux 操作系统软硬件信息 一、查看 Linux 操作系统位数 ---- 在 64 位的 Linux 中 , 使用 48 位 表示 "...虚拟地址空间 " ; 使用 45 位 表示 " 物理地址空间 " ; 执行 getconf LONG_BIT 命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;...得到结果 64 , 说明该系统是 64 位 Ubuntu Linux 操作系统 ; 二、查看 Linux 操作系统软硬件信息 ---- 执行 cat /proc/cpuinfo 命令 , 可以查看..." Linux 内核位数 “ 和 ” 系统的软硬件信息 " ; 输出内容解析 : vendor_id : GenuineIntel CPU 制造商 GenuineIntel cpu family :...内核启动时测量的 CPU 速度 clflush size : 64 每次刷新的缓存大小 cache_alignment : 64 缓存地址对齐单位 address sizes : 42 bits physical

31.9K20

Linux内核分析应用3-进程管理

本系列是对 陈莉君 老师 Linux 内核分析应用[1] 的学习记录。...讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 3.1 进程概述 一个程序通过编译器将其编译成汇编程序,经过汇编器将其汇编成目标代码,通过链接器形成可执行文件a.out或者elf格式,最后交给操作系统来执行...进程最基本的状态有三种: 就绪态,睡眠态和运行态,在具体的操作系统中,可能实例化出多个状态....进程创建 对于进程,线程,内核线程,内核使用唯一的数据结构task_struct来分别表示,也使用相同的调度算法对其进行调度....更多可参阅第三版第七章 参考资料 [1] Linux 内核分析应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

17150

Linux内核分析应用2-内存寻址

本系列是对 陈莉君 老师 Linux 内核分析应用[1] 的学习记录。..."保护模式"的引入: 访问内存时不能直接从段寄存器中获得段的起始地址,而需经过额外的转化或检查 "黄金时代": Linux内核中的C和汇编语言 用的GNU的扩展C 汇编语言用的是AT&T的汇编格式...默认页大小是 4KB) 两级页表: Linux四级分页模式 I386体系结构(下) ---- 2.4 动手实践-将虚拟地址转换成物理地址 页全局目录 所有的进程都共享一个内核页表 最新的CPU...保护模式特权级概述 操作系统-保护模式中的特权级 . 页面大小是由操作系统设计者确定的 (错) ....段地址 虚拟地址转换段分割 参考资料 [1] Linux 内核分析应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

21230

Linux 内核入口分析

从启动引导程序 bootloader(uboot)跳转到 Linux 内核后,Linux 内核开始启动,今天我们分析一下 Linux 内核启动入口。...PAGE_OFFSET 是 Linux 内核空间的虚拟起始地址,定义在: linux4.14/arch/arm64/include/asm/memory.h 注意,这里的地址都很重要,很多地方会用到。...TEXT_OFFSET 定义在: linux4.14/arch/arm/Makefile 中: 这个值一般是 0x00008000 ,算出 PAGE_OFFSET 后加上这个值就是 Linux 内核的起始地址...修改这个偏移量就可以使Linux内核拷贝到不同的地址,自己修改注意内存对齐。...367 行跳转到了我们熟悉的 start_kernel,就可以看下面这篇文章: 手把手教你分析 Linux 启动流程 ·················· END ··················

1.9K10

Linux内核源码分析方法

如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。...因此本文更期望于引导更多徘徊在Linux内核大门之外的人进入Linux的世界,去亲自体会内核的神奇伟大。...而内核代码不同,它处理的信息多数和计算机底层密切相关。比如操作系统、编译器、汇编、体系结构等相关的知识的欠缺,也会让阅读内核代码障碍重重。 3.分析内核代码的方法不够合理。...最后一点,如何从全局的角度把握分析的源码,这也是我想大家分享的经验。...一本是《Linux内核设计实现》,该书为读者快速精简的介绍了Linux内核的主要功能和实现。

5.3K70

原 《Linux内核分析》小节

笔者作为通信工程的学生,在学习这门课之前虽然会用Linux完成一些简单的任务,但却从没有接触过这个操作系统的内在之美。...直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概可以在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....” 只是在学习的过程中,没有找到合适的参考书,导致复习有些困难。...通过一个简单的时间片轮转多道程序内核代码,分析linux操作系统 mykernel是一个基于Linux 3.9.4的内核模拟程序,通过观察软件模拟的操作系统运行过程可以帮助我们理解操作系统的进程工作、调度机制...跟踪分析Linux系统的启动过程 MenuOS是一个基于Linux 3.18.6内核的微型操作系统,本文使用gdb来观察系统的启动过程,至init进程被启动为止。...陈政/arc001    原创作品转载请注明出处  《Linux内核分析》MOOC课程

1.6K60
领券