[深入 Linux 内核架构][笔记] 一、基本概述

深入 Linux 内核架构

作者:解琛
时间:2020 年 8 月 27 日

一、基本概述

我选择的是 Linux 2.6.24 版本的内核进行研究。

1.1 内核的任务

内核是硬件与软件之间的一个中间层,其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

  • 从应用程序的视角看,内核是一台增强的计算机 。应用程序和硬件本身没有联系,只与内核有联系,内核是应用程序所知道的层次结构中的最底层。
  • 若干程序在系统中并发运行时,内核是一个资源管理程序 。负责将可用共享资源分配到各个系统进程中,并保证系统的完整性。
  • 内核是一个库 ,提供一组面向系统的命令。

1.2 实现策略

在操作系统实现方面,有以下两种范性。

1.2.1 微内核

基本功能直接由中央内核 实现,其他功能交给独立进程,进程通过明确定义的通信接口和中心内核通信。

1.2.2 宏内核

内核的全部代码,包括所有子系统都打包到一个文件中,内核中的每个函数都可以访问内核中的其他部分。

1.3 内核的组成部分

Linux 使用的整体式的宏内核架构。

内核的组成部分

1.3.1 进程、进程切换、调度

UNIX 操作系统下运行的应用程序、服务器以及其他程序都成为进程 。系统中真正运行的进程数目不超过 CPU 数目。

  • 内核需要借助 CPU 的帮助,负责进程切换。
  • 内核需要确定现存进程之间共享 CPU 的时间。

进程之间的切换称为进程切换 ,确定哪个进程运行多长时间的过程称为调度

1.3.2 UNIX 进程

Linux 对进程采用了一种层次结构,每一个进程都依赖于一个父进程。

内核启动 init 程序作为第一个进程。该进程负责进一步的系统初始化操作,并显示登录提示符或图形登录界面,init 是进程树的根。

我当前使用的是 Ubuntu18.04,使用 pstree 指令可以查看系统的进程树如下。

xiechen@xiechen-Ubuntu:/$ pstree
systemd─┬─ModemManager───2*[{
   ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{
   NetworkManager}]
        ├─2*[VBoxClient───VBoxClient]
        ├─2*[VBoxClient───VBoxClient───2*[{
   VBoxClient}]]
        ├─VBoxClient───VBoxClient───3*[{
   VBoxClient}]
        ├─VBoxService───8*[{
   VBoxService}]
        ├─accounts-daemon───2*[{
   accounts-daemon}]
        ├─acpid
        ├─apache2───5*[apache2]
        ├─avahi-daemon───avahi-daemon
        ├─boltd───2*[{
   boltd}]
        ├─colord───2*[{
   colord}]
        ├─containerd───12*[{
   containerd}]
        ├─cron
        ├─cups-browsed───2*[{
   cups-browsed}]
        ├─cupsd───2*[dbus]
        ├─2*[dbus-daemon]
        ├─dockerd───11*[{
   dockerd}]
        ├─fcitx───{
   fcitx}
        ├─fcitx-dbus-watc
        ├─fwupd───4*[{
   fwupd}]
        ├─gdm3─┬─gdm-session-wor─┬─gdm-wayland-ses─┬─gnome-session-b─┬─gnome-shell─┬─Xwayland───6*[{
   Xwayland}]
        │      │                 │                 │                 │             └─17*[{
   gnome-shell}]
        │      │                 │                 │                 ├─gsd-a11y-settin───3*[{
   gsd-a11y-settin}]
        │      │                 │                 │                 ├─gsd-clipboard───8*[{
   gsd-clipboard}]
        │      │                 │                 │                 ├─gsd-color───9*[{
   gsd-color}]
        │      │                 │                 │                 ├─gsd-datetime───2*[{
   gsd-datetime}]
        │      │                 │                 │                 ├─gsd-housekeepin───2*[{
   gsd-housekeepin}]
        │      │                 │                 │                 ├─gsd-keyboard───9*[{
   gsd-keyboard}]
        │      │                 │                 │                 ├─gsd-media-keys───9*[{
   gsd-media-keys}]
        │      │                 │                 │                 ├─gsd-mouse───2*[{
   gsd-mouse}]
        │      │                 │                 │                 ├─gsd-power───3*[{
   gsd-power}]
    ......

树结构的拓展方式和新进程的创建方式密切相关。UNIX 中有 fork 和 exec 两种创建新进程的机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

解琛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值