《linux系统编程手册》学习笔记1-基本概念

本文详细介绍了Linux系统编程的基本概念,包括内核的职责,如进程调度、内存管理和文件系统;用户和组的管理;shell的运行机制;以及进程、内存映射、静态库与共享库、进程间通信和同步。此外,还涵盖了信号、线程、会话、控制终端等关键概念,为深入学习Linux系统编程奠定基础。
摘要由CSDN通过智能技术生成

2.基本概念

1.操作系统的核心——内核

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

*内核为管理计算机的有限资源提供软件层。linux内核可执行文件采用/boot/vmlinuz或与类似的路径名,vm表示虚拟内存机制,z表示内核是经过压缩的可执行文件

内核的职责

  • 进程调度: 计算机内配备有一个或多个CPU执行程序指令。Linux属于抢占式多任务操作系统,“多任务”指多个进程可同时驻留于内存,都能获得对CPU的使用权;“抢占”则是指一组规则,控制着哪些进程获得对CPU的使用及使用时间。由内核进程调度程序决定。

  • 内存管理:物理内存(RAM)属于有限资源。采用虚拟内存管理机制:1.进程与进程、进程与内核之间彼此隔离;2.只需将进程的一部分保持在内存中。
  • 提供了文件系统:内核在磁盘之上提供有文件系统,允许对文件执行创建、获取、更新以及删除等操作。
  • 创建和终止进程:内核将新程序载入内存,为其提供运行所需的资源,称之为“进程”;进程执行完毕,内核要释放其占用的资源,供后续程序重新使用。
  • 对设备的访问:内核既为进程访问设备提供了简化版的标准接口,同时还要仲裁多个进程对每一个设备的访问。
  • 联网:内核以用户进程的名义收发网络消息(数据包)
  • 提供系统调用应用编程接口(API):进程利用内核入口点(系统调用)请求内核去执行各种任务。

内核态和用户态

现代处理器架构一般允许CPU至少在两种不同状态下运行:用户态和核心态,执行硬件指令可使CPU在两种状态间切换。虚拟内存区域划分(标记)为用户空间部分和内核空间部分。

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

一个运行系统通常会有多个进程并行其中,内核则是运行系统的中枢所在,对于系统的一切无所不知、无所不能,为系统上所有的进程的运行提供便利。

2.shell

shell是一种具有特殊用途的程序。主要用于读取用户输入的命令,并执行相应的程序以响应命令。也称之为命令解释器。

login shell是指用户刚登录系统时,由系统创建,用以运行shell的进程。

3.用户和组

系统对每个用户的身份做唯一标识,用户可隶属多个组。

超级用户在系统中享有特权,用户ID为0,登录名通常为root。

4.单根目录层级(/)、目录、链接及文件

内核维护着一套单根目录结构,以放置系统所有的文件。

 5.文件I/O模型

UNIX系统I/O模型最显著的特性之一是I/O通用性概念。

内核只提供一种文件类型:字节流序列

unix没有文件结束符概念,读取文件时如无数据返回,便会认定抵达文件末尾。

I/O系统调用使用文件描述符(数值很小的非负整数)指代打开的文件。获取文件描述符的常用手法是调用open()。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传送给read和write。

linux每个进程创建时会打开三个文件stdin、stdout、stderr,对应文件描述符0、1、2。

6.程序

形式:

  1. 由编程语言编写的源码;
  2. 经过编译和链接处理转换的二进制机器码;

过滤器:从stdin读取输入,加以转换,再将转换后的数据输出到stdout的程序。cat tac grep

命令行参数:程序运行时在命令行中输入的内容。int main(int argc,char *argv[ ]),argc变量包含命令行参数的总个数,argv指针数组的成员指针则逐一指向每个命令行参数字符串。argv[0]标识程序名本身。

7.进程:正在执行的程序实例

  • 创建进程:进程使用系统调用fork()创建新进程。子进程继承父进程数据段、栈段和堆栈副本,只读的程序文本段由父、子进程共享。每个进程有一个唯一的整数型进程标识符PID和父进程标识符PPID。
  • 执行程序:1.执行与父进程共享代码段中的另一组不同的函数;2.使用系统调用execve()加载并执行一个全新的程序
  • 进程终止:1.使用_exit()系统调用(或相关exit()库函数);2.向进程传递信号,将其'杀死'。

特权进程:有效用户ID为0的进程及其所创建的子进程;

init进程:系统引导时,由内核创建。该进程的相应程序文件/sbin/init,主要任务是创建并监控系统运行所需的一系列进程。

守护进程:系统引导时启动,在后台运行,无控制终端供其读写数据,系统关闭时终止。

环境变量:每个进程在进程用户空间内存中维护着一组环境变量。在大多数shell中,可使用export命令创建。例:export env="hello"

资源限制:使用系统调用setrlimit(),进程可为自己消耗的各类资源设定一个上限。

8.内存映射

调用系统函数mmap()的进程,会在其虚拟地址空间中创建一个新的内存映射。

  • 文件映射:将文件部分区域映射入调用进程的虚拟内存
  • 匿名映射:无文件,映射页面的内容初始化为0

9.静态库和共享库

目标库:将一组函数代码加以编译,并置于一个文件中,供其他应用程序调用。

静态链接:从静态库中抽取所需目标模块副本,将其复制到最终的可执行文件。

动态链接:在可执行文件中写入一条记录,以表明可执行文件在运行时需要使用该动态库。

10.进程间通信(IPC)及同步

进程间通信机制

  • 信号:表示事件发生
  • 管道("|"操作符)和FIFO,用于在进程间传递数据
  • 套接字:供同一台主机或不同主机上所运行的进程之间传递数据并
  • 文件锁定:防止其他进程读取或更新文件内容
  • 消息队列:进程间交换消息
  • 信号两:同步进程动作
  • 共享内存

11.信号:IPC的方式之一

采用不同的整数标识各种信号类型,并以SIGxxxx形式的符号名加以定义。

12.线程

每个进程可执行多个线程。每个线程执行相同的程序到吗,共享同一数据区域和堆,拥有属于自己的栈,用来装载本地变量和函数调用的链接信息。

线程之间通过共享全局变量进行通信。

13.进程组和shell任务控制

shell执行的每个程序都会在一个新进程内发起。

几乎所有的主流SHELL都提供了一种交互式特性,名为任务控制。在支持任务控制的shell中,将管道内所有的进程置于一组新进程组或任务中。进程组的每个进程都具有相同的进程组标识符(即某个进程的进程ID)

14.会话、控制终端和控制进程

会话是指一组进程组(任务)。会话中所有的进程都具有相同的会话标识符。会话的首进程即创建会话的进程,会话ID即首进程ID。首进程打开的终端成为会话的控制终端,首进程即终端的控制进程。

15.伪终端

一对相互连接的虚拟设备,也称主从设备(master/slave device)。在这对设备之间,设有一条IPC信道,可供数据进行双向传递。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值