《Linux/UNIX系统编程手册》第2章读书笔记

写在前面的话
红烛啊!
你流一滴泪,灰一分心。
灰心流泪你的果,
创造光明你的因。
红烛啊!
“莫问收获,但问耕耘。”
第2章 基本概念
本章讲了很多基本概念,有的概念会贯穿全书,有的概念作者只简单提了一下,后面的章节会有深入讲解。对于这些概念,博主不一一介绍,而是将其中有联系的概念放到一起说。
一、Linux系统的组成
1.Linux内核
功能:进程调度:Linux属于抢占式多任务操作系统。计算机只有一个cpu(我知道有多核的,咱们这只讲单核的,用大白话好理解),既然多任务,那只能一个一个来获得cpu的使用权,那谁先谁后呢?这就需要制定规则,这个规则就是“抢占”(有的书中叫做“循环时间共享(SCHED_RR)”)。
内存管理:虚拟内存管理机制。
提供文件系统
创建和终止进程:要创建进程,内核给这个进程提供资源,进程结束,内核会释放资源。
访问设备
网络管理
提供系统调用API:看这句话“进程可利用内核入口点(也称系统调用)请求内核去执行各 种任务。”这句话里有三个对象:进程、系统调用、内核,我们可以这么理解,用户进程(有系统自己启动的进程,也有用户代码启动的进程,我们这里就说用户好理解些)通过系统调用,访问内核,来执行各种操作。我们可以想象三个层,用户层、系统调用层、内核层,也就是说,用户只能通过各种系统 调用接口请求内核来使用硬件。本书主题就是介绍各种系统调用接口。
2.Shell
读取用户输入的命令,并执行相应的程序以响应命令。所以叫做命令解释器。
Shell命令:用户向系统内核发出的控制请求。
Shell脚本:Shell命令的有序集合。
几种重要的Shell版本:主要记住sh和bash,学Linux系统系统一定会用到其中的一个。
3.文件系统
文件系统是指操作系统中与文件管理有关的软件和数据。比较两个概念就清楚了,Windows文件系统是以驱动器的盘符为基础的,也就是常说的硬盘分区;Linux文件系统是一个文件树,且它的所有文件和外部设备都是以文件的形式挂载在这个文件树上。这就提到了文件系统的目录结构,也就是书中2.4节所讲的。
4.应用程序
经过编译之后的可执行程序。
二、用户和组
Linux系统中可以建立多个用户。每个用户包含5个属性:用户名、用户ID(UID)、组ID、主目录、登录shell。
用户组是具有相同特征的用户的集合体,通过用户组可以让多个用户具有相同的权限。
用户和用户组的对应关系:
一对一:某个用户是某个组的唯一成员;
多对一:多个用户是某一个组的成员,不归属其他组;
一对多:某个用户是多个组的成员;
多对多:多个用户对应多个组。
三、I/O进程
1.文件I/O和标准I/O
文件I/O的操作核心是文件描述符。
标准I/O(stdio函数库),本书不会介绍这方面内容。
2.程序和进程
1)区别:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;
进程是动态概念,它是程序执行的过程,包括创建、调度、消亡。
2)进程的内存布局:
文本段:程序文本
数据段:全局变量、常数
堆区:进程从该区域额外申请的空间
栈区:存放局部变量、函数调用链接信息,随函数调用、返回而增减的一片内存
3)进程创建
进程在创建的时候,内核为其分配虚拟内存空间(4G,其中3G属于用户空间,剩下的1G属于内核空间)为程序变量分配空间,建立内核记账数据结构(task struct),描述进程属性(进程的用户,进程的ID,进程所属组ID,进程的状态)。
进程可以使用fork()来创建一个新进程。子进程从父进程继承数据段、栈区、堆区的副本后,可以修改,而文本段由父、子进程共享。
进程ID为PID,父进程ID为PPID。
3.内存映射
创建进程时,内核为其分配虚拟内存空间是通过映射物理内存得来的。
将虚拟地址空间分割成等大小的“页”单元(4K),将物理内存也分割成与虚拟地址空间相同的“页”单元。系统为每一个进程维护一张页映射表,MMU(内存管理单元,前面讲的Linux内核功能之一)根据页映射表完成地址的转换以及保护。
页映射表:页映射表由页表条目组成,每一个页表条目记录虚拟地址空间中的页单元的对应关系。
4.静态库和共享库
静态库在程序编译时会被链接到目标代码中,而程序运行时将不再需要该静态库,因此体积较大。
共享库在程序编译时不会被链接到目标代码中,而是在程序运行时才被载入,在程序运行时还需共享库存在,因此代码体积较小。
5.进程间通信(IPC)
在本书第1章中已经回顾了进程间通信的发展历史,但是感觉有点乱,这里再梳理一下:AT&T公司把传统的进程间通信方式改进了一下,形成System V IPC;BSD跳出这个限制,单独整了个套接字通信机制;POSIX标准在扩展中又包含了自己的通信机制。而Linux中使用最多的进程间通信方式主要有以下几种:
传统的进程间通信方式:无名管道(pipe)、有名管道(fifo)、信号(signal)
System V IPC:共享内存(share memory)、消息队列(message queue)、信号灯(semaphore)
BSD:套接字(socket)
6.信号
信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。
信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。
用户进程对信号的响应方式:
1)忽略信号:对信号不做任何操作,但是有两个信号不能忽略:SIGKILL及SIGSTOP
2)捕捉信号:定义信号处理函数,当信号发生时,执行响应的处理函数
3)执行缺省操作:Linux对每种信号都规定了默认操作
7.线程
一个进程可以创建多个线程,线程与线程之间共享进程的数据段,文本段,堆区,每一个线程有属于自己的栈区,保存自己的局部变量,控制函数的调用和返回。
线程之间可以通过共享的全局变量进行通信。
四、其他
关于其他概念,请读者自行理解。
其实本章就像是一本教材的绪论,博主阅读本章时经常翻看全书目录,为了能够使自己全书结构有个大概的认识。本章中涉及了很多概念,博主大致进行了分组,目的是为了使本章更加有条理,大部分概念在本书的后续章节中都会展开来讲,在本章中博主也仍有很多地方不理解,在后续章节中再进行深入探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值