Linux内核设计与实现 第一章 Linux内核简介

news/2024/5/17 16:14:26/文章来源:https://blog.csdn.net/weixin_55255438/article/details/126640550

1.1Unix的历史

1969,贝尔实验室的程序员Dennis Ritchie 和Ken Thompsin等,编写Multics失败,不甘心没有交互式操作系统,设计了一个文件系统原型,这个原型最终演化成了Unix。
Unix系统设计简洁,发布时提供源代码,用C语言整个重写了(移植性强),所以很多组织团体尝试开发它。其中,加州大学伯克利分校就开发的很成功。

Unix强大的根本原因是它有一下特点:
1)简洁:系统调用少
2)Unix中,所有的东西都被当做文件对待
3)移植能力:Unix的内核和相关的系统工具是用C语言编写的
4)策略和机制分离的设计理念:此理念就需要a)进程创建简洁;b)进程间通信机制简单稳定。如此各个单一目的的程序片段组合简单,分工协作就会使系统有清晰的层次化结构。
大多数编程问题实际上都可以分成两部分:“需要提供什么功能”(机制)和“如何使用这些功能”(策略)
解决问题的方法是将调度机制(scheduling mechanism)与调度策略(scheduling policy)分离,也就是将调度算法以某种形式参数化,而参数可以由用户进程填写。看一下数据库的例子。假设内核使用优先级调度算法,但提供一条可供进程设置(并改变)优先级的系统调用。这样,尽管父进程本身并不参与调度,但它可以控制如何调度子进程的细节。在这里,调度机制位于内核,而调度策略则由用户进程决定。

1.2追寻Linus足迹:Linux简介

1991,芬兰学生Linus,因为不能对Minix乱改,所以自己开发了使用Inter 80386微处理器的不成熟的但五脏俱全的Unix,发布到Internet,linux从此扬帆起航。
Linux是类Unix系统,但它不是unix。没有使用unix的源码,但借鉴了unix很多,不同之处也很多
linux是非商业化的产品且用途广泛
Linux的自由大致是你可以随意更改,但是随意更改后要发布改过的版本,必须允许别人随意更改

1.3操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那一部分。
系统这个词其实包含了操作系统和所有运行在它之上的应用程序。
用户界面是操作系统的外在表象,内核才是操作系统的内在核心。
通常一个内核由负责响应中断的中断服务程序,负责管理多进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网路、进程间通信等系统服务程序组成。
保护机制:内核空间,用户空间。
应用程序完成工作的基本方式是通过系统调用界面陷入内核:在系统中运行的应用程序通过系统调用来与内核通信,应用程序通常调用库函数,再由库函数通过系统调用界面,让内核代其完成不同任务。

上下文:
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
1)进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中断服务结束时能恢复被中断进程的执行。
2)中断上下文:硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

1.4Linux内核与传统Unix内核的比较

1.5Linux内核版本

在这里插入图片描述

内核开发大致阶段:众多开发者尝试往Linux加入一些新的特性->确定加入哪些特性,不再接受新的特性->众多开发者对实现新特性的代码加入自己发现的BUG->发布稳定

1.6Linux内核开发者社区在这里插入图片描述

LWN.net对Linux内核开发的报道是详细,技术性和及时性的。也许你应该阅读“Kernel coverage at LWN.net”在网址:http://lwn.net/Kernel/.

更多GNU软件和linux关系的讨论可以在http://www.gnu.org/gnu/linux-and-gnu.html获取

vger是发布LKML服务机器的名字。服务器同样存放了大量其他linux相关邮箱。更多的信息可以在下面的网页找到:http://vger.kernel.org/

  1. 如何向linux-内核邮件列表注册?
    答:订阅前请仔细考虑。你是否希望邮箱里面出现很多的邮件?你是否那么关心linux内核开发期待每周更新一次内核,忍受bug,错误和系统崩溃的时间和精力的浪费?你是否准备好加入伟大的企鹅,并被人称为怪胎?
    好了,如果你仍然期待加入,发送 “subscribe linux-kernel your_email@your_ISP” 到majordomo@vger.kernel.org (注意,不要包含双引号字符,当然替换你自己的邮箱地址)。你将会完成订阅。我经常看到如下的报告:
    FAILED:
    : …
    <<- RCPT To:edmond@cedar-republic.com
    ->> 550 edmond@cedar-republic.com… we do not relay

反馈这个问题到网址: http://vger.kernel.org/mxverify.html。
确认你没有上述问题!详见: http://vger.kernel.org/majordomo-info.html。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_381803.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AviX Ergo 改善工作条件的视觉人体工程学

随着装配线的要求越来越复杂,人体工程学正成为关注的焦点。AviX Ergo 通过视频评估带来了一种全新的方法来改善工作场所的人体工程学。 AviX Ergo 将 AviX 方法对工作场所的深入分析与公认的 Borg CR-10 量表相结合,以确定工作场所的生理压力水平,同时评估心理压力。 1、BOR…

uniapp一键生成iOS通用链接

第一步&#xff1a;开启Associated Domains服务 登录苹果开发者中心 &#xff0c;在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID&#xff0c;确保开启Associated Domains服务 开启Associated Domains服务后需要重新生成profile文…

即时零售加速布局,社区团购的优势依旧非常明显

新零售业态不断发展&#xff0c;线上便捷性和个性化推荐优势逐步放大&#xff0c;线下渠道智能化水平持续提升&#xff0c;线上线下渠道趋向深度融合。即时零售、无接触消费和直播带货等新消费场景加快布局并保持发展势头。随着社会环境的变化以及购物需求的旺盛刺激&#xff0…

跨越技术鸿沟,革新存储产业:华瑞指数云重磅发布下一代软件定义存储产品

2022年8月31日&#xff0c;由华瑞指数云&#xff08;ExponTech&#xff09;主办的“全自研下一代软件定义存储产品体验沙龙”在北京圆满举办。发布会现场&#xff0c;华瑞指数云重磅推出全自研极速分布式块存储产品WDS 。这是继2021年11月24日该公司在中国数据与存储峰会发布Wi…

Django之路由层

目录 django请求生命周期流程图 路由匹配 分组命名匹配 无名分组 有名分组 传递额外的参数给视图函数 命名URL 和 URL反向解析 命名URL URL反向解析--前端 URL反向解析---后端 无名分组反向解析 有名分组反向解析 路由分发 名称空间 django请求生命周期流程图 dj…

Tomcat的安装与优化

目录 一、安装Tomcat所需javajdk环境 ①安装jdk ②设置jdk环境变量 ③加载生效&#xff0c;查看版本 二、安装Tomcat ①解压 ②改名&#xff0c;移动位置 ③优化管理 ④启动关闭 ⑤浏览器进入本地地址&#xff0c;添加8080端口即可进入tomcat服务器 三、优化tomcat启动…

什么是伪共享?Java8如何使用@sun.misc.Contended避免伪共享?

什么是伪共享 缓存系统中是以缓存行&#xff08;cache line&#xff09;为单位存储的。缓存行是2的整数幂个连续字节&#xff0c;一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时&#xff0c;如果这些变量共享同一个缓存行&#xff0c;就会无…

网课搜题公众号接口 大学生新手使用必备

网课搜题公众号接口 大学生新手使用必备 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后…

风控模型黑箱可解释,试下这个方法来演示

模型的开发&#xff0c;目前在互金领域场景中因为变量多&#xff0c;开发周期短&#xff0c;目前用得最多的就是XGB、LGB这类的机器学习模型。 比如我们之前跟大家输出的关于个人信贷反欺诈评分卡的开发内容里&#xff0c;我们用的就是lightgbm来建模的&#xff0c;相关的操作细…

设计模式--简单工厂方法

简介 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式通过定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类,这个父类具有共有的属性和方法。因在简单工厂模式中用于创建实例的方法通常是静态方法,因此也称为静态工厂方…

SpringBoot整合Flowable工作流引擎框架

Flowable工作流引擎框架介绍 一个Java编写的轻量级业务流程引擎&#xff0c;为开发人员、系统管理员和业务用户提供工作流和业务流程管理&#xff08;BPM&#xff09;平台。不仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有自己的用户管理、微服务…

新机器(禁止上网)安装vscode及公钥方式登陆linux

1.1 新机器(禁止上网)安装vscode 注意:以下三个程序版本必须一至。 1) vscodeWin10安装程序 2) win10插件(ssh客户端) 3) linux里vscode-server-linux-x64.tar.gz(ssh服务端)方法一:从原桌面直接copy文件夹(绿色)转移到新机器 方法二:安装新的VSCodeUserSetup-x64-1.70.2.ex…

macOS分发app打包+签名+公证+添加票据+生成dmg文件

1.打包 网上有很多使用命令行的打包的方式大家可自行查找,以下是使用Xcode进行打包. 首先配置证书要配置Developer ID Application证书然后使用的是Xcode进行打包:Product->Archive 这种打包方式的好处是省去了签名的过程,但是用网上其他人的命令查看签名时候还是未成功&a…

lararvel学习文档

学习文档 http://laravel.p2hp.com/ http://laravel.p2hp.com/cndocs/9.x/eloquent#generating-model-classes laravel9.x https://learnku.com/docs/laravel/9.x laravel8.5 https://learnku.com/docs/laravel/8.5 laravel8.x https://learnku.com/docs/laravel/8.x …

CentOS7安装MySQL(完整版)

在CentOS中默认安装有MariaDB&#xff0c;这个是MySQL的分支&#xff0c;但为了需要&#xff0c;还是要在系统中安装MySQL&#xff0c;而且安装完成之后可以直接覆盖掉MariaDB。 1 下载并安装MySQL官方的 Yum Repository [rootlocalhost ~]# wget -i -c http://dev.mysql.com…

最新小红书数据 小红书爬虫 小红书接口 xhs 小红书算法 小红书api

最新版小红书APP接口,需要交流的朋友联系,少量勿扰,谢谢! 只取APP公开数据,不做违法事情,如有侵犯贵公司,请联系删除! 博主详情 笔记详情 博主笔记列表 笔记评论 关键词搜索等等接口已部署,支持并发,可测试!

openmmlab 教程1-安装

文章目录openmmlab 教程11. 安装1.1 介绍1.2 安装1) 安装mmcv-full(建议)2) 安装mmseg3) mmcv-full和mmcv区别1.3 验证安装成功1) 源码安装2) pip 安装openmmlab 教程1 官方文档 安装 MMCV — mmcv 1.6.1 文档 依赖 — MMSegmentation 0.27.0 文档 笔记链接 https://gitee.co…

windows安装JDK与系统变量配置

目录 问题现象&#xff1a; 解决方法&#xff1a; 1、安装 2、系统变量配置 2.1、JAVA_HOME 2.2、Path 2.3、CLASSPATH 问题现象&#xff1a; 今天梳理了一下JDK的安装和系统变量配置&#xff01; 解决方法&#xff1a; 1、安装 双击下载好的jdk安装包&#xff1a; 安装…

【区块链 | 默克尔树】如何利用Merkle实现空投,像Uniswap一样使用Merkle执行Airdrop

如果你想直接跳过如何实现 Uniswap Airdrop,请继续阅读以下部分:创建 Merkle Airdrop 的步骤 图片来自 https://ccoingossip.com/what-is-airdrop-in-crypto-world/ Airdrop Airdrop 是指项目决定向一组用户分发代币的事件。以下是实现 Airdrop 的一些潜在方法: 1. 管理员…

2.1 Elasticsearch DSL搜索-数据准备

自定义词库建立索引dsl_search(名字随意)手动建立mappingsPOST /dsl_search/_mapping { "properties": { "id": { "type": "long" }, "age": { "type&quo…