Linux内核概述

文章目录
  • Linux内核简介
    • 操作系统与内核简介
    • Linux内核与传统Unix内核的比较
    • Linux内核版本
      • 在什么地方找源码
    • 内核没有内存保护机制
    • 同步和并发

Linux内核简介

本专栏,用于记录我对Linux内核源码的学习,就像STL源码的那个专栏一样,我知道阅读源码对我的意义。 愿者上钩咯,共同进步。

Linux克隆了Unix,但Linux不是Unix。 Linux是一个非商业化的产品,它的代码是开源的,这也给了我们无限机会。

操作系统与内核简介

用户界面是操作系统的外在表象,内核才是操作系统的内在核心。系统其他部分必须依靠内核这部分软件提供的服务,像管理硬件设备,分配系统资源等等。内核有时候被称作是超级管理者或者是操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序。负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,不能直接访问硬件,还有其他些使用限制。当内核运行的时候,系统才进入内核空间。

内核还要负责管理系统的硬件设备。现有的几乎所有的体系结构,包括全部Linux支持的体系结构,都提供了中断机制。当硬件设备想和系统通信的时候,它首先要发出个异步的中断信号去打断内核正在执行的工作。中断通常对应着个中断 号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。举个例子,当你敲击键盘的时候,键盘控制器发送-一个中断信号,告知系统键盘缓冲区有数据到来。内核注意到这个中断对应的中断号,调用相应的中断服务程序。该服务程序处理键盘数据然后通知键盘控制器可以继续输人数据了。为了保证同步,内核可以停用中止一既可以停止所有的中断也可以有选择的停止某个中断号对应的中断。许多操作系统的中断服务程序都不在进程上下文中执行。它们在一个与所有进程都无关的、专门的中断上下文中运行。之所以存在这样一个专门的执行环境,就是为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速的退出。

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

当Linus和其他内核开发者设计Linux内核时,他们并没有完全彻底地与Unix诀别。他们充分地认识到,不能忽视Unix的底蕴(特别是Unix的API).而由于Linux并没有基于某种特定的Unix,Linus 和他的伙伴们对每个特定的问题都可以选择已知最理想的解决方案一在有些时候,当然也可以创造一些新的方案。以下是对Linux 内核与Unix各种变体的内核特点所作的分析比较:

●Linux支持动态加载内核模块。尽管Linux内核也是整体式结构,可是允许在需要的时候动态地卸除和加载部分内核代码。

●Linux支持对称多处理(SMP)机制,尽管许多Unix的变体也支持SMP.但传统的Unix并不支持这种机制。

●Linux内核可以抢占(preemptive). 与传统的Unix不同,Linux内核具有允许在内核运行的任务优先执行的能力。在其他各种Unix产品中,只有Solaris和IRIX支持抢占。

●Linux对线程支持的实现比较有意思:内核井不区分线程和其他的一般进程。对于内核来说,所有的进程都-一样一只不过其中的一 些共享资源而已。

Linux内核版本

Linux内核有两种:稳定的和处于开发中的。稳定的内核具有工业级的强度,可以广泛的应用和部署。新推出的稳定内核大部分都只是修正了一些Bug或是加入了一些新的设备驱动程序。相反地,处于开发中的内核中许多东西变化得都很快。而且由于开发者不断试验新的解决方案,内核常常发生剧烈的变化。

Linux通过一个简单的命名机制来区分稳定的和处于开发中的内核(参考图1-2)。这种机制使用三个用“.”分隔的数字来代表不同内核。第一个数字是主版本号,第二个数字是从版本号,第三个数字是修订版本号。从版本号可以反映出该内核是一个稳定版本还是一个处于开发中的版本:该数字如果是偶数,那么此内核就是稳定版,如果是奇数,那么它就是开发版。举例来说,版本号为2.6.0的内核,它就是一个稳定版。这个内核的主板本号是2,从版本号是6,修订版本号是0。”头两个数字在一起描述了“内核系列”一在这个例子中,就是2.6版内核系列。

在什么地方找源码

1、内核源码通常安装在 /usr/src/linux下。 2、去Linux内核开发者社区找,只要你的英文水平够高。

内核没有内存保护机制

如果一个用户程序视图进行一次非法的内存访问,内核会发现这个错误并结束整个进程(段错误,核心已转储)。

同步和并发

内核很容易产生竞争条件。和单线程的用户空间程序不同,内核的许多特性都要求能够并发的访问共享数据,这就要求有同步机制保证不出现竞争条件,特别是:

●Linux内核支持多处理器并发处理。所以,如果没有适当的保护,在两个或两个以上的处理器上运行的代码很可能会同时访问共享的同一个资源。

●中断是异步到来的,完全不顾及当前正在执行的代码。也就是说,如果不加以适当的保护,中断完全有可能在代码访问共享资源的当间到来,这样,中段处理程序就有可能访问同- -资源。

●Linux内核可以抢占。所以,如果不加以适当的保护,内核中一 段正在执行代码可能会被另外一段代码抢占,从而有可能导致几段代码同时访问相同的资源。

常用的解决竞争的办法是自旋锁和信号量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 守护进程

    a.创建子进程,父进程退出,一切工作在子进程中执行,形式上脱离了控制终端 b.在子进程中创建新的会话(会话后面章节会提到),使子进程完全独立出来,脱离控制 ...

    看、未来
  • FTP文件管理项目(本地云)项目日报(一)

    1、分组,分组情况如上。 2、确定项目秩序,明确组长的监督与协助职责,每日日报需要按时提交。 3、明确数据包协议:

    看、未来
  • 用C++跟你聊聊“桥接模式”

    桥接模式,号称设计模式中最抽象的一个,不是吹出来的啊。且看我能不能讲清楚啊。 这时候就体现出小故事的重要性了,这也是我为什么每篇设计模式都要先讲个小故事,便于理...

    看、未来
  • 聊聊运维应该了解的一些内核知识

    本文主要是《Linux内核设计与实现》这本书的读书笔记,这本书我读了不下十遍,但依然感觉囫囵吞枣。我结合自己的理解,从这本书中整理出了一些运维应该了解的内核知识...

    力哥聊运维与云计算
  • 重学css3(概览)

    浏览器内核又可以分成两部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。

    IT人一直在路上
  • centos yum update只升级软件不升级内核

    CentOS升级软件时不升级内核的命令如下 CentOS7.5/7.6 yum update --exclude "kmod-kvdo*,kernel*,cen...

    我爱你的一诺
  • Linux 的启动流程

    本篇的重点是讲解设备和驱动的启动流程,设备和驱动的流程是整个内核启动的核心,也是工作中最常面对的问题。出于知识点的系统性考虑,在进入主题之前我们先看下整个 Li...

    刘盼
  • K8S内核故障[内核BUG]

    开启7个异常会触发OOM的节点,在一个NODE上,经过测试发现,3.10内核,是并行创建了7个任务,同时触发oom,导致内核锁耗死。测试 2-3分钟内,服务器会...

    院长技术
  • linux内核态和用户态小结

    当进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核状态。此时处理器处于特权级最高的(0级)内核代码。当进程处于内核态时,执行的内核代码会使用当前的内...

    ydymz
  • 操作系统内核之争

    1、内核分类 内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。 中文版维基百科上将内核分为四大类: 单内核(宏内核); 微内核;...

    大数据和云计算技术

扫码关注云+社区

领取腾讯云代金券