免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 57978 | 回复: 14
打印 上一主题 下一主题

[实践] 【好书推荐】奔跑吧 linux 内核 [复制链接]

论坛徽章:
3
15-16赛季CBA联赛之上海
日期:2017-11-16 13:45:42CU十四周年纪念徽章
日期:2017-11-16 17:03:0215-16赛季CBA联赛之北京
日期:2017-11-23 16:03:45
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-11-02 12:04 |只看该作者 |倒序浏览
结果公布:
获书的有wh7211、钢笔布莱恩特、shenlanyouyualokigoingstudy
请以上获奖人员在2018年1月15日前将自己的姓名、电话、地址、公司名字站短给 拉拉乙   兑换礼品
话题背景:

伴随计算机层次化体系结构的更迭,操作系统、编译系统和数据库作为IT、互联网及物联网的基石,多年来不断演进。而 Linux 内核自 1991 年发起至今,集数万人智慧结晶,承上启下,早已成为学术界与工业界协作与创新的重要平台。我们经常提及手机的操作系统安卓(Android)、智能家居、车载系统等,许多产品都在应用 Linux 及开源软件。社会在奔跑,技术也在奔跑,Linux 内核发展至今已经越来越复杂、越来越庞大。许多新技术、新算法、新补丁不断融入到 Linux 内核之中

论话题:

1.      linux内核有哪几大模块?
2.      cache 在 Linux 内核中有哪些应用?(一两个例子即可)
3.      cache coherency 和 memoryconsistency 有什么区别?
4.      如何理解Linux一切皆是文件?

活动时间:11月2日—12月2日

活动奖励:本次活动我们将选出5位优秀回答者赠送技术图书《奔跑吧 linux 内核》一本


作者:张天飞
出版社:人民邮电出版社
版次:第一版
开本:787*1092

样章试读: 奔跑吧Linux内核.pdf (3.14 MB, 下载次数: 80)




--------------------------------------------------------------------------------------------------------
欢迎大家发帖讨论,分享是美德,也希望CU这个平台带给大家进步和成长,有任何问题,请站短联系!



技术讨论,请加QQ群:203848540


论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
2 [报告]
发表于 2017-11-03 18:03 |只看该作者
本帖最后由 wh7211 于 2017-11-03 18:11 编辑

1、linux内核有哪几大模块?

内核是操作系统最基本的部分,主要负责管理系统资源。linux内核由五大模块构成:
(1)进程调度:控制进程对CPU资源的使用,各进程公平合理访问CPU并保证内核能及时执行硬件操作。
(2)内存管理:控制多个进程安全的共享主内存区域。linux的内存管理支持虚拟内存,操作系统负责在磁盘和内存间交换数据。
(3)虚拟文件系统:支持对外部设备的驱动和存储。
(4)进程间通信:支持进程间多种通信机制。
(5)网络接口:支持多种网络通信标准的访问,支持多种网络硬件。

2、cache 在 Linux 内核中有哪些应用?(一两个例子即可)

(1)文件缓存提高读写效率

linux内核具有文件Cache管理机制,即内核分配并用来存储文件数据的内存管理机制。当应用程序读取文件中的数据时,内核先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当向文件中写数据时,内核先分配内存接收用户数据,然后再将数据从内存写到磁盘上。通过这种文件Cache管理机制,所需的数据已经在内存中时,只需从页面Cache中找到具体位置,然后将数据拷贝到用户缓冲区,而不需要进行磁盘I/O操作,可以明显提高磁盘性能和读写效率。

(2)TCP缓存减少IO流量

linux操作系统内核使用 write()/send() 函数发送数据,使用 read()/recv() 函数接收数据。
创建socket后,会分配两个缓冲区,输入缓冲区和输出缓冲区。发送数据时,先将数据写入缓冲区,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们何时被发送,也不管有没有到达目标机器,这些都由TCP协议来负责。TCP协议控制下,数据有可能刚写入缓冲区就即时发送到网络,也可能多次写入的数据在缓冲区中积压,然后一次性发送到网络;接收数据时,同理从输入缓冲区中读取数据,而不是直接从网络中读取。通过这样的TCP缓存机制,可以减少IO流量,有效提高网络性能。


3、cache coherency 和 memory consistency 有什么区别?

(1)cache coherency(缓存一致性)

当CPU看到一条内存读写指令时,就会通过一级缓存L1(或L2,L3...)对内存进行读写操作,如果CPU每个核都有自己的缓存,CPU缓存段中对应的内存内容就可能被另一个CPU修改,缓存一致性协议就是要使多组缓存的内容保持一致。

(2)memory consistency(内存一致性)

描述的是并行的程序在执行过程中内存操作正确性的问题。最近几年出现的几种比较重要的内存一致性模型如下:

◆ 严格一致性内存模型
任何对一个内存位置X的读操作,将返回最近的一次对该内存位置的写操作所写入的值。如果我们有很多处理器,没有缓存,通过一条总线来访问内存,那么就我们得到了“严格一致性内存模型”。实现起来最困难并且代价高昂,也没必要。

◆ 顺序一致性内存模型
比严格一致性内存模型稍微弱化一点。

◆ 其他模型
处理器一致性,释放一致性,弱一致性等等。这些模型下的同步操作的代价都比顺序一致性的代价要小。

总之,缓存一致性要求局部的(Single memory address)一致性,内存一致性要求全局的(All memory)一致性。



4、如何理解Linux一切皆是文件?

Linux一切皆是文件是指Linux系统采用文件系统结构存储和管理文件和数据,这样做的主要原因是文件系统具有下面的优点:
(1)层次目录的文件易于扩充,即易于加大文件系统的空间;
(2)它可以放在磁盘的任何位置上,没有位置限制;
(3)管理一个文件系统更有效,更方便;
(4)通过文件系统可以限制用户对存储空间的使用;
(5)能够保证整个文件系统结构的完整性,当一个文件系统出现问题,不会影响到其他文件系统;
(6)文件系统按名存取文件,用户不需要知道文件在物理磁盘上的具体位置,只需要知道文件名和文件所在的目录;
(7)文件系统对文件有保护、保密措施,安全可靠;
(8)可以实现文件共享,节省空间和时间开销。



论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
3 [报告]
发表于 2017-11-07 19:49 |只看该作者
你都说得这么明白了,还让我说什么,楼上的。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2017-11-08 11:30 |只看该作者
对啊,沙发不只抢了座,连麦也抢了,真是啥话也说不上。

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-01-06 16:35:38
5 [报告]
发表于 2017-11-10 09:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
6 [报告]
发表于 2017-11-10 09:42 |只看该作者
一楼都说了,那就占个座

论坛徽章:
0
7 [报告]
发表于 2017-11-10 16:09 |只看该作者
1.      linux内核有哪几大模块?   
   进程调度模块 、 内存管理模块 、文件系统模块 、进程间通信模块 、网络接口模块

2.      cache 在 Linux 内核中有哪些应用?(一两个例子即可)
     如 ext2/ext3、jfs、ntfs 等

3.      cache coherency 和 memoryconsistency 有什么区别?
   Consistency与Coherency之间有一定的联系,所关注的对象并不等同。
MemoryConsistency的实现需要考虑处理器系统Cache Coherency使用的协议。除了狭义Cache之外,在处理器系统中存在的广义Cache依然会对Memory Consistency模型产生重大影响。Memory Consistency和Cache Coherency有一定的联系,但是并不对等。这两部分内容相对较为复杂,可以独立成篇。有些学者认为Cache Coherency是Memory Consistency的一部分[55],更为准确的说是Memory Coherency的一部分。

4.      如何理解Linux一切皆是文件?
首先通常在windows中是文件的东西, 它们在linux中也是文件其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件. 你可以使用访问文件的方法访问它们获得信息.再其次,一些很离谱的东西, 比如管道, 比如/dev/zero(一个可以读出无限个0的文件) /dev/null(一个重定向进去之后就消失了的文件). 它们也是文件再再其次, 类似于socket这样的东西, 使用的接口跟文件接口也是一致的.带来的好处就是, 你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)来处理unix中大多数的资源.顺带提及, 一切皆文件跟一切资源皆字符串我想是息息相关的.这就使得组合了简单的命令和字符处理工具(awk, sed)之后, shell脚本就能发挥出强大的功能.可以读一读unix hater's handbook

论坛徽章:
19
处女座
日期:2014-07-18 14:50:5415-16赛季CBA联赛之北京
日期:2019-09-16 15:39:1415-16赛季CBA联赛之上海
日期:2019-09-15 15:29:0415-16赛季CBA联赛之山西
日期:2017-03-09 10:58:232017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30
8 [报告]
发表于 2017-11-12 23:26 |只看该作者
1.     linux内核有哪几大模块?
Linux内核由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。每个模块的功能沙发楼已经解释得比较详细了。

2.     cache Linux 内核中有哪些应用?(一两个例子即可)
Cache应该是指CPUcache,沙发解释可能偏应用层了,不是很合符题目。每个CPUCachedata cache和指令cache,以ARM为例,L1 L2 Cache 控制器需要保证 cache 的一致性,在 Cortex-A9 cache 的一致性是由 MESI 协议来实现的。Cortex-A9 处理器内置了 L1 Cache 模块,由 SCUSnoop Control Unit)单元来实现 Cache 的一致性管理。L2 Cache 需要外接芯片(例如 PL310)。在最糟糕情况下需要访问主存储器,并将数据重新传递给 LSQ,完成一次存储器读写的全过程。。
cache linux 内核中有很多巧妙的应用:
1)内核中常用的数据结构通常是和 L1 cache 对齐的。例如,mm_structfs_cache 等数据结构使用“SLAB_HWCACHE_ALIGN”标志位来创建 slab 缓存描述符,见 proc_caches_ init() 函数。
2)一些常用的数据结构在定义时就约定数据结构以 L1 Cache 对齐,使用“____ cacheline_internodealigned_in_smp”“____cacheline_aligned_in_smp”等宏来定义数据结 构,例如 structzonestruct irqactionsoftirq_vec[ ]irq_stat[ ]struct worker_pool 等。
3)数据结构中频繁访问的成员可以单独占用一个 cache line,或者相关的成员在 cache line 中彼此错开,以提高访问效率。例如,struct zone 数据结构中 zone->lock zone-> lru_lock 这两个频繁被访问的锁,可以让它们各自使用不同的 cache line,以提高获取锁的效率。 再比如 structworker_pool 数据结构中的 nr_running 成员就独占了一个 cache line,避免 CPU 同时读写该成员时引发其他临近的成员颠簸现象。
4slab 的着色区。
5)自旋锁的实现。在多 CPU 系统中,自旋锁的激烈争用过程导致严重的 CPU cacheline bouncing 现象。

3.     cache coherency memory consistency 有什么区别?
在多处理器环境下,还需要考虑 Cache 的一致性问题。高速缓存一致性(cache coherency)产生的原因是在一个处理器系统中不同 CPU 核上的数 cache 和内存可能具有同一个数据的多个副本,在仅有一个 CPU 核的系统中不存在一致性问题。维护 cache 一致性的关键是跟踪每一个 cache line 的状态,并根据处理器的读写操作和总线上的相应传输来更新 cache line 在不同 CPU 核上的数据 cache 中的状态,从而维护 cache 一致性。 cache一致性有软件和硬件两种方式,有的处理器架构提供显式操作cache的指令,例如PowerPC不过现在大多数处理器架构采用硬件方式来维护。在处理器中通过 cache 一致性协议来实现,这些协议维护一个有限状态机(Finite State MachineFSM),根据存储器读写指令或总线上的传输,进行状态迁移和相应的 cache 操作来保证 cache 一致性,不需要软件介入。 cache 一致性协议主要有两大类别,一类是监听协议(Snooping Protocol),每个 cache 都要被监听或者监听其他 cache 的总线活动;另外一类是目录协议(Directory Protocol),全局统一管理 cache 状态。
cache coherency 高速缓存一致性关注的是同一个数据在多个 cache 和内存中的一致性问题,解决高速缓存一致性的方法主要是总线监听协议,例如 MESI 协议等。而 memory consistency 关注的是处理器系统对多个地址进行存储器访问序列的正确性,学术上对内存访问模型提出了很多,例如严格一致性内存模型、处理器一致性内存模型,以及弱一致性内存模型等。弱内存访问模型在现在处理器中得到广泛应用,因此内存屏障指令也得到广泛应用。


4.     如何理解Linux一切皆是文件?
正如《Unix编程艺术》书中阐述的简洁是Unix程序的核心风格。 Unix哲学的KISS原则:Keep it simple, stupid! Unix与Linux,两者在基本设计思想上相同,“一切皆文件”的好处更多的表现在开发者上,好处就是大部分操作可以统一接口,这样的设计给应用程序一个统一的访问资源的方式,而且实现了一套统一的权限管理方式。

论坛徽章:
0
9 [报告]
发表于 2017-11-16 12:55 |只看该作者
1.     linux内核有哪几大模块?
Linux内核由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。
2.     cache 在 Linux 内核中有哪些应用?(一两个例子即可)
Cache应该是指CPU的cache,沙发解释可能偏应用层了,不是很合符题目。每个CPU的Cache分data cache和指令cache,以ARM为例,L1 和 L2 Cache 控制器需要保证 cache 的一致性,在 Cortex-A9 中 cache 的一致性是由 MESI 协议来实现的。Cortex-A9 处理器内置了 L1 Cache 模块,由 SCU(Snoop Control Unit)单元来实现 Cache 的一致性管理。L2 Cache 需要外接芯片(例如 PL310)。在最糟糕情况下需要访问主存储器,并将数据重新传递给 LSQ,完成一次存储器读写的全过程。。
cache 在 linux 内核中有很多巧妙的应用:
(1)内核中常用的数据结构通常是和 L1 cache 对齐的。例如,mm_struct、fs_cache 等数据结构使用“SLAB_HWCACHE_ALIGN”标志位来创建 slab 缓存描述符,见 proc_caches_ init() 函数。
(2)一些常用的数据结构在定义时就约定数据结构以 L1 Cache 对齐,使用“____ cacheline_internodealigned_in_smp”和“____cacheline_aligned_in_smp”等宏来定义数据结 构,例如 structzone、struct irqaction、softirq_vec[ ]、irq_stat[ ]、struct worker_pool 等。
(3)数据结构中频繁访问的成员可以单独占用一个 cache line,或者相关的成员在 cache line 中彼此错开,以提高访问效率。例如,struct zone 数据结构中 zone->lock 和 zone-> lru_lock 这两个频繁被访问的锁,可以让它们各自使用不同的 cache line,以提高获取锁的效率。 再比如 structworker_pool 数据结构中的 nr_running 成员就独占了一个 cache line,避免多 CPU 同时读写该成员时引发其他临近的成员“颠簸”现象。

3.     cache coherency 和 memory consistency 有什么区别?
在多处理器环境下,还需要考虑 Cache 的一致性问题。高速缓存一致性(cache coherency)产生的原因是在一个处理器系统中不同 CPU 核上的数据 cache 和内存可能具有同一个数据的多个副本,在仅有一个 CPU 核的系统中不存在一致性问题。维护 cache 一致性的关键是跟踪每一个 cache line 的状态,并根据处理器的读写操作和总线上的相应传输来更新 cache line 在不同 CPU 核上的数据 cache 中的状态,从而维护 cache 一致性。 cache一致性有软件和硬件两种方式,有的处理器架构提供显式操作cache的指令,例如PowerPC,不过现在大多数处理器架构采用硬件方式来维护。在处理器中通过 cache 一致性协议来实现,这些协议维护一个有限状态机(Finite State Machine,FSM),根据存储器读写指令或总线上的传输,进行状态迁移和相应的 cache 操作来保证 cache 一致性,不需要软件介入。 cache 一致性协议主要有两大类别,一类是监听协议(Snooping Protocol),每个 cache 都要被监听或者监听其他 cache 的总线活动;另外一类是目录协议(Directory Protocol),全局统一管理 cache 状态。
cache coherency 高速缓存一致性关注的是同一个数据在多个 cache 和内存中的一致性问题,解决高速缓存一致性的方法主要是总线监听协议,例如 MESI 协议等。而 memory consistency 关注的是处理器系统对多个地址进行存储器访问序列的正确性,学术上对内存访问模型提出了很多,例如严格一致性内存模型、处理器一致性内存模型,以及弱一致性内存模型等。弱内存访问模型在现在处理器中得到广泛应用,因此内存屏障指令也得到广泛应用。


4.     如何理解Linux一切皆是文件?
Keep it simple, stupid

论坛徽章:
8
2017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之天津
日期:2019-06-20 14:25:4015-16赛季CBA联赛之天津
日期:2019-08-20 23:06:5319周年集字徽章-庆
日期:2019-08-27 13:24:4219周年集字徽章-19
日期:2019-09-06 18:55:5019周年集字徽章-年
日期:2019-09-06 18:55:5019周年集字徽章-周
日期:2019-09-20 17:18:2220周年集字徽章-CU
日期:2020-11-11 13:06:03
10 [报告]
发表于 2017-11-17 14:22 |只看该作者
1.linux内核有哪几大模块?
Linux内核有五大模块,分别是:
进程调度模块:用来负责控制进程对CPU 资源的使用。所采取的调度策略是各进程能够公平合理地访问CPU, 同时保证内核能及时地执行硬件操作。

内存管理模块:用于确保所有进程能够安全地共享机器主内存区, 同时, 内存管理模块还支持虚拟内存管理方式, 使得Linux 支持进程使用比实际内存空间更多的内存容量。并可以利用文件系统, 对暂时不用的内存数据块交换到外部存储设备上去, 当需要时再交换回来。

虚拟文件系统模块:用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提供并支持与其它操作系统兼容的多种文件系统格式。

进程间通信模块:用于支持多种进程间的信息交换方式

网络接口模块:提供对多种网络通信标准的访问并支持许多网络硬件。

2.cache 在 Linux 内核中有哪些应用?(一两个例子即可)
①内核中常用的数据结构通常是和 L1 cache 对齐的。

②一些常用的数据结构在定义时就约定数据结构以 L1 Cache 对齐,使用“____ cacheline_internodealigned_in_smp”和“____cacheline_aligned_in_smp”等宏来定义数据结 构,例如 structzone、struct irqaction、softirq_vec[ ]、irq_stat[ ]、struct worker_pool 等。

③数据结构中频繁访问的成员可以单独占用一个 cache line,或者相关的成员在 cache line 中彼此错开,以提高访问效率。

④slab 的着色区。

⑤自旋锁的实现。

3.cache coherency 和 memoryconsistency 有什么区别?
cache coherency高速缓存一致性关注的是同一个数据在多个cache和内存中的一致性问题,解决高速缓存一致性的方法主要是总线监听协议,例如MESI协议等。而memory consistency关注的是处理器系统对多个地址进行存储器访问序列的正确性,学术上对内存访问模型提出了很多,例如严格一致性内存模型、处理器一致性内存模型,以及弱一致性内存模型等。弱内存访问模型在现在处理器中得到广泛应用,因此内存屏障指令也得到广泛应用。

4.如何理解Linux一切皆是文件?
不论是普通的文件,还是特殊的目录、设备等,Linux都将它们同等看待成文件,通过同一套文件操作界面来对它们进行操作。操作文件时需先打开;打开文件时,Linux的VSF会知道该文件对应的文件系统格式;当VSF把控制权传给实际的文件系统时,实际的文件系统再做出具体区分,对不同的文件类型执行不同的操作。这也就是“一切皆是文件”的根本所在。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP