跳转至

Linux 系统编程手册笔记-(1)

第二章 基本概念

2.1 操作系的核心-内核

​ 操作系统有两层含义一种是指完整的软件包,用来管理计算机的核心层软件,以及附带的所有标准工具软件,包含命令解释器,图形用户界面,文件操作工具和文本编辑器等

​ 另一种更狭义的含义则是指管理分配计算机资源(CPU,RAM和设备)的核心层软件。术语内核通常就是指这一种含义。

​ 虽然在没有内核的情况下计算机也能运行程序。但是有了内核会极大的简化其他程序的编写和使用。主要归功与内核所提供的用于管理有限资源的核心软件层。

​ 操作系统,内核,shell之间的关系

​ 操作系统包括操作系统内核,驱动,运行库,引导程序等

​ 内核,操作系统最核心的内容,一般来说内核特指一个或者几个文件

​ shell,一般是指跟用户直接交互的界面,可以是命令行也可以是窗口,用户通过shell 访问并控制计算机

内核提供的功能

进程调度

内存管理

提供文件系统

创建和终止程序

对设备的访问

联网

提供系统调用应用编程接口(API)

进程调度

​ Linux 属于抢占式进程调度多任务操作系统。多任务是指多个进程可同时驻留于内存,且每个进程都能获得对CPU的使用权。抢占则是指一组规则。这组规则控制着哪些进程获取对CPU的使用,以及每个进程能使用多长时间,这两者都是由内核进程调度程序(而非进程本身)决定。

内存管理

​ Linux 与其他操作系统一样也采用了虚拟内存管理机制,虚拟内存的优势主要有以下两方面的优势。

​ 1.进程与进程之间,进程与内核之间彼此隔离,因此一个进程无法读取或修改内核或其他进程的内存内容

​ 2.只需将进程的一部分保存在内存中,这不但降低了每个进程对内存的需求量,而且还能在RAM中同时加载更多的进程,也大幅度提升了如下事件的发生概率,在任一时刻,CPU都至少一个进程可以执行,从而使得对CPU资源的利用更加充分。

提供文件系统

​ 内核在磁盘之上提供有文件系统,允许对文件执行创建,获取,更新和删除等操作

创建和终止程序

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

对设备的访问

​ 计算机外接设备(鼠标,键盘,磁盘等)可实现计算机与外部世界的通信,包括输入和输出等。内核既为程序访问设备提供简化版的标准接口,同时还要仲裁多个进程对每一个设备的访问。

联网

​ 内核以用户进程的名义收发网络消息(数据包)。该任务包括将网络数据包路由到目标系统

提供系统调用应用编程接口(API)

​ 进程可利用内核入口点(也成为系统调用)请求内核去执行各种任务。

Linux等多用户操作系统会为每一种用户构建一种抽象:虚拟私有计算机(virtual private computer)。每个用户都可以登录进入系统,独立进行操作,而与其他用户基本没有关联。

每个用户都有自己的独立硬盘空间(主目录),每个用户都能运行程序,每个程序都能从CPU中获取资源,运转与自有的虚拟地址空间。这些程序也能独立访问设备,通过网络传递信息。

内核同时还负责解决(多进程)访问硬件资源时可能引发的冲突,用户和进程是无感知的。

内核态和用户态

2.2 shell

​ shell 的分类,分为Bourne Shell (sh),C shell(csh),Korn shell,Bourne again shell(shell)。其中Linux 应用最广泛的时bash,在Linux 上,Bourne shell(sh)其实正是由bash 仿真提供的。

2.3 用户和组

​ 现代处理器架构一般运行CPU至少在两种不同状态下运行.执行硬件指令可以使CPU在内核态和用户态之间进行切换。可以将虚拟内存区域划分为用户空间部分和内核空间部分。在用户态下运行时,CPU只能访问标记用户空间的内存,试图访问属于内核空间的内存会引发硬件异常。当运行于核心态时,CPU即能访问用户空间内存也能访问内核空间内存

用户

​ 系统的每个用户都有唯一的登录名(用户名)和与之对应的整数型用户ID(UID)。系统密码文件/etc/passwd为每个用户定义由一行记录,记录的信息还包括

组ID(用户所属第一个组的整数型ID),

主目录[用户登陆后的初始目录])

登陆shell:执行以解释用户命令的程序名称

​ 每个用户组对应着系统文件/etc/group中的一行记录,记录包含以下信息:

​ 组名:组名称(唯一)

​ 组ID:与该组相关的整数型ID

​ 用户列表:属于该组的用户登陆名列表(通过密码文件记录的groupID 字段未能标识出的该组其他成员,也在此列),以逗号分隔。

超级用户

​ 超级用户在系统中享有特权。超级用户账号的用户ID为0,通常登录名为root。超级用户凌驾于系统的权限检查之上。因此,无论对文件施以何种访问权限限制,超级用户都可以访问系统中的任何文件,也能发送信号干预系统运行的所有用户进程。

2.4 单根目录层级,目录,链接及文件

2.5 文件I/O模型

2.6 程序

2.7 进程

2.8 内存映射

2.9 静态库和共享库

[9].https://zhuanlan.zhihu.com/p/71372182 (浅谈静态库和动态库)

2.10 进程间通信及同步

2.11 信号

2.12 线程

2.13 进程组和shell 任务控制

2.14 会话,控制终端和控制终端

2.15 伪终端

2.16 日期和时间

2.17 客户端/服务端架构

2.18 实时性

2.19 /proc文件系统

类似于其他UNIX 实现,Linux 也提供了/proc 文件系统,由一组目录和文件组成,mount于/proc 目录下。

/proc 文件系统是虚拟文件系统,以文件系统的形式提供了指向内核数据的接口。可以通过/proc文件系统查看和改变系统属性。同时可以通过/proc/PID形式的目录查看当前系统中正在运行的程序相关信息(PID即为进程ID)

/proc 目录下文件通常采用可以直接阅读的文本形式,shell脚本可以对其进行解析。/proc目录下的文件可以被程序打开,读取,和写入/proc目录下的既定文件。修改文件需要特殊权限。

[19].https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html (proc 文件系统的官方描述)