Unix/Linux编程:操作系统的核心---内核

内核

术语从“操作系统”通常包含两种不同的含义。

  • 指的是完整的软件包,这包括用来管理计算机资源的核心层软件,以及附带的所有标准软件工具,比如命令行解释器、图形用户界面、文件操作工具、文本编辑器等
  • 在更狭义的范围内,是指管理和分配计算机资源(即CPU、RAM和设备)的核心层软件。

术语“内核”通常是值第二种含义。

虽然在没有内核的情况下,计算机也能运行程序,但有了内核会极大简化其他程序的编写和使用,令程序员“功力”大进、游刃有余。这要归功于内核为管理计算机的有限资源所提供的软件层

一般情况下,Linux内核可执行文件采用/boot/vmlinuz或者与之类似的路径名。而文件名的来历也颇有渊源。早期的Unix实现称其内核为Unix。在后继实现了虚拟内存机制的Unix系统中,其内涵名称变更为vmunix。对Linux来说,文件名称中的系统名需要调整,而以z替换linux末尾的x,意在表明内核是经过压缩的可执行文件

内核的职责

内核所能执行的注意任务如下所示

  • 进程调度:

    • 计算机内均配置有一个或者多个CPU(中央处理单元),以执行程序指令
    • 与其他Unix系统一样,Linux属于抢占式多任务操作系统
      • “多任务”意指多个进程(即运行中的程序)可以同时驻留于内存,而且每个进程都能获得对CPU的使用权
      • “抢占"是指一组规则。这组规则控制着哪些进程获得对CPU的使用,以及每个进程能使用多长时间。这两者都有内核进程调度程序(而非进程本身)决定
  • 内存管理:

    • 物理内存(RAM)属于有限资源,内核必须以公平、高效地方式在进程间共享这一资源。
    • 与大多数现代操作系统一样,Linux也采用了虚拟内存管理机制,这项技术主要具有以下两方面的优势:
      • 进程与进程之间、进程与内核之间彼此隔离,因此一个进程无法读取或修改内核或其他进程的内存内容
      • 只需将进程的一部分保持在内存中,这不但降低了每个进程对内存的需求量,而且还能在RAM中同时加载更多的进程。这也大幅提升了如下事件的发生概率,在任一时刻,CPU都至少有一个进程可以执行,从而使得CPU资源的利用更加充分
  • 提供了文件系统:内核在磁盘之上提供有文件系统,允许对文件执行创建、获取、更新以及删除等操作

  • 创建和终止进程

    • 内核可以将新程序载入内存,为其提供运行所需的资源(比如,CPU,内存以及对文件的访问等)。这样一个运行中的程序我们称之为“进程”
    • 一旦进程执行完毕,内核还要确保释放其占用资源,以供后续程序重新使用
  • 对设备的访问

    • 计算机外接设备(鼠标、键盘、磁盘等)可实现计算机与外部世界的访问,这一通信机制包括输入、输出或者两者兼有之。
    • 内核即为程序访问设备提供了简化版的标准接口,同时还要仲裁多个进程对每一个设备的访问
  • 联网:

    • 内核以用户进程的名义收发网络消息(数据包)。该任务包括将网络数据包路由至目标系统
  • 提供系统调用应用编程接口(API): 进程可以利用内核入口点(也称为系统调用)请求内核去执行各种任务

出来上面特性外,一般而言,诸如Linux之类的多用户操作系统会为每个用户营造一种抽象:虚拟私有计算机(virtual private computer)。这就是说,每个用户都可以登录进入系统,独立操作,而与其他用户大致无关:

  • 比如,每个用户都有属于自己的磁盘存储空间(主目录)。
  • 再者,用户能够运行程序,而每一个程序都能从CPU资源中“分一杯羹”,运转于自身的虚拟地址空间中。
  • 而且这些程序还能独立访问设备,并通过网络传递信息。
  • 内核负责解决(多进程)访问硬件资源时可能引发的冲突,用户和进程对此往往一无所知。

内核态和用户态

现在处理器架构一般允许CPU至少在两种不同状态下运行,即:

  • 用户态
  • 核心态(也叫做监管态supervisor mode)

执行硬件指令可使CPU在两种状态间来回切换

与之对应,可以将虚拟内存区域划分(标记)为两个部分:

  • 用户空间部分
  • 内核空间部分

在用户态下运行时,CPU只能访问被标记为用户空间的内存,试图访问属于内核空间的内存会引发硬件异常。

当运行于核心态时,CPU既能访问用户空间内存,也能访问内核空间内存。

当且仅当在核心态运行时,才能执行某些特定操作。这样的例子包括:执行宕机(halt)指令去关闭系统、访问内存管理硬件,以及设备IO操作的初始化等。

实现者们利用这一硬件设计,将操作系统置于内核空间。这确保了用户进程既不能访问内核指令和数据结构,也无法执行不利于系统运行的操作。

以进程及内核视觉检视系统

以进程的角度看系统

  • 一个运行系统通常会有多个进程并行其中。
  • 对进程来说,很多事情的发生都无法预期:
    • 执行中的进程不清楚自己对CPU的占用何时“到期”,系统随之又会调用哪个进程来使用CPU,也不知道自己何时会再次获得对CPU的使用。
    • 信号的传递和进程间通信事件的触发由内核统一调度,对进程而言,随时可能发生。
  • 进程不秦楚自己在RAM中的位置。换句话说,进程内存空间的某块特定部分如今到底是驻留在内存中还是被保持在交换空间(磁盘空间中的保留区域,作为计算机RAM的补充)里,进程本身并不知晓。
  • 同样的,进程也搞不清自己所访问的文件“居于”磁盘驱动器的何处,只不过通过名称来引用文件而已。
  • 进程的运作方式“与世隔绝”----进程间彼此不能通信
  • 进程本身无法创建出新进程,哪怕“自行了断”都不行
  • 进程不能与计算机外界的输入输出设备直接通信

以内核的角度看系统

  • 内核是运行系统的中枢所在,对系统的一切无所不知、无所不能,为系统上所有进程的运行提供便利
  • 由哪个进程来"接管"对CPU的使用,任何"接管","任期"多久,都由内核说了算
  • 在内核维护的数据结构中,包含了与所有正在运行的进程有关的信息。随着进程的创建、状态发生变化或者终结,内核会及时更新这些数据结构。
  • 内核所维护的底层数据结构可以将程序使用的文件名转换为磁盘的物理结构
  • 每个进程的虚拟内存与计算机物理内存以及磁盘交换区之间的映射关系,也在内核维护的数据结构之内
  • 进程间的所有通信都要通过内核提供的通信机制来完成。
  • 响应进程发出的请求,内核会创建新的进程,终结现有进程
  • 最好,由内核来执行与输入/输出设备之间的所有直接通信,按需与用户进程交互信息

在完成很多日常编程任务时,多是以面向进程的思维方式来考虑编程问题,但是,有时候有必要转换视觉,站在内核的角度上看问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unix/Linux系统编程是指使用C语言编写程序,能够调用操作系统提供的系统调用和库函数来完成系统级任务的程序设计过程。Unix/Linux系统编程的目的是编写高效、可靠、安全、移植性好的应用程序或系统程序。 Unix/Linux系统编程核心代码包括使用系统调用,文件操作(读写文件、目录操作等),进程控制(fork、exec等),信号处理,网络编程等。 在Unix/Linux中,系统调用是与内核进行通讯的标准方式。程序中使用系统调用来请求内核完成某个任务。例如,open()系统调用用于打开一个文件,并返回文件描述符。read()和write()系统调用用于读写文件。 文件操作是Unix/Linux系统编程中的一个重要部分。文件操作包括打开文件、读写文件、删除文件、重命名文件等操作。另外还有目录操作,如创建目录、删除目录、遍历目录等。 进程控制是Unix/Linux系统编程中最为复杂的部分之一。进程控制包括创建新进程、执行新进程、等待进程结束、发送信号给进程等等。其中最常见的系统调用是fork()和exec()。fork()用于创建新进程,而在创建新进程之后,exec()则用于在新进程中执行新的程序。 信号处理是Unix/Linux系统编程中的一个重要概念。信号是由系统发出的一个异步事件,可以从进程内部或外部发出。进程可以对信号进行相应操作。常见的信号包括SIGINT(Ctrl+C中断信号)、SIGTERM(终止进程信号)和SIGKILL(强制终止进程信号)。 网络编程Unix/Linux系统编程中的另一个重要部分。Unix/Linux提供了许多网络编程API,例如socket()、bind()、listen()和accept()等。使用这些API可以编写服务器端和客户端程序,进行网络通信。 总之,Unix/Linux系统编程涉及到许多重要的概念和操作,涉及到操作系统底层的各种操作。因此,需要开发人员有扎实的C编程能力、熟悉Unix/Linux系统调用和库函数、了解进程控制和信号处理的概念、熟悉网络编程API以及充分了解操作系统内部的机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值