在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → LINUX内核源代码情景分析(下).pdf

LINUX内核源代码情景分析(下).pdf

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:29.95M
  • 下载次数:20
  • 浏览次数:190
  • 发布时间:2021-02-01
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
LINUX内核源代码情景分析(下).pdf
教的表面看来是马步冲权实则都是内功心法,郭靖拜师洪七之后开始练习降龙十八掌凭借的就是这深厚的内 功,吞食蝮蛇宝血又加上练习了周博通传授的九阴真经和外加功夫双手互博技之后,终于练就行走江湖的武 功,由此可见马玉道长传授给了郭靖的是最基础的,也是最重要的观念编程也好比盖高楼,根基没打好早晩有 天会挎掉的,而且盖得越高,损失也越惨重。这些底层知识和课本不是没有用也不是高深的不能学,而是我 们必须掌握的基础。 这些是个人的愚见,说的不是很清楚,大家可以看看这些前辈们的经验,相信看完后大家一定会有所体会 的。为了方便大家阅读,我把这些前辈们的建议的文章整理成了pdf大家在下面下载吧希望对大家有帮助。pdf ttstle:http://theithome.net/read-htm-tid-123.html 说了这么多无非是想告诫大家要打好扎实的基础,不要只顾追求时髦的技术,打好基础再去学那些技术或是 参加些培训,对自身的发展会更好的。 基础这么重要怎样学好它呢?我觉得学好它们应该对照这些基础课程所涉及的方面多看一些经典书籍像算 法导论编程珠玑代码大全(具体介绍在本论坛毎本书的版块里)等这些经典书籍不仅能帮助我们打好基础,而且 对我们的程序人生也能产生莫大的影响,相信认真硏究看完这些书籍后,我们的程序之咯会十分顺畅。然而这 些书籍并不好读有些甚至相当难读,国内的大学用这些书当教材的也不多,这些书又偏向理论自己读起来难免会 有些枯燥无味。于是就想到建一个论坛,大家共同讨论学习这些书籍,就会学的更踏实更牢固更有趣这样就能 为以后的学习打下扎实的基础。 本论坛特色: theithome net 1为计算机初学者或基础不太扎实的朋友指明方向,要注重內功 2为学习者推荐经典书籍,指明应看哪些书籍,怎样练内功 3为学习者提供一个交流的地方,更容易学好,不会那么枯燥 4对每本书分章分别讨论,更专,会学的更踏实更牢固 5讨论的都是经典书籍,每一本都会让我们受益匪浅对每本书分别讨论是很有意义的。 目录 第7章基于 socket的进程间通信 命号导@导单罩 看◆●ψ自·◆命◆●b●●●●●●●4 71系统词用 socket() 72数sys_ socket()—创建插∏ 73函数 sys_bind()—指定插冂地址 口口普自唱↓自山p看鲁p即 74凶数 sys_listen()—没定 seryer插凵 75数 sys_accep()接受连接请求 37 7.6函数 sys_connecto请求连接 48 77报文的接收与发送… ■d↓■自lpb自d 1■q号P即 78插口的关闭. 79其他… 117 第8章设备驱动 ●●4罪助甲召音自白自一中自合命昏看命邻命●◆哈自●●辛◆命●备●ψ●即善昏●●晶哥即导命器目D聊 119 81概述… 82系统调用 mknod() t自■bpb看dp 27 8.3可安装模块. 134 84PCI总线 ]78 8.5块设备的驱动 248 86字符设备驱动概述. 44t4bb4卜·甲1·甲+· …326 8.7终端设备与汉字信息处理 330 88控制台的驱动… 362 4r44r甲 89通用串行外部总线USB. ,4l3 8.10系统调用 selecte()以及异步输入/输出 8.11设备文件系统 deafs 589 第9章多处理器SMP系统结构 nn607 91概述. 607 92SMP结构中的互斥问题 93高速缓存与内存的一致性 615 94SMP结构中的中断机制 623 95SMP结构中的进程调度… 636 96SMP系统的引导 642 Linux内核源代码情景分析(下册 第10章系统引导和初始化..000663 10.1系统引导过程概述 10.2系统仞始化〔第一阶段) 667 10.3系统初始化(第二阶段 683 104系统初始化(第三阶段 719 105系统的关闭和重引导 737 第7章 基于 socket的进程间通信 71系统调用 socket() 柑对于传统的 Unix IPC,“插口”,即 socket(有些资料中也称“套接字”),是更为一般的进程间 通信机制。它既适用于同一台计算机上的进程间通信,也适用于网络环境的进稆间通信,并且是当今 所有网络操作系统必不可少的基础功能。本章侧重从同计算机上的进程间通信的角度介绍 socket在 Linux内核中的实现。至于它在网络环境中的推广,则因分量太重、篇幅太大,只好留仵力一本书的内 容 在Umix的发展史中,AT&T的贝尔实验室与加州大学伯克利分校的伯克利软件发布中心(BSD) 可以说是两大主力。当A&I致力于改进传统的Unix进程间通信功能,从而形成了一整套 Sys V iPc 机制的同时,BSD也在设法对其加以改进。与此同时,BSD又最早将计算机网络的通信规程,特别是 当时正在成形的TCPP规程,实现到Un的内核中去。所以,对于当时的BSD来说,很自然地会把 二者结合在一起考虑,把同一计算机(或曰网络“节点”)上的进程间通信纳入更广的、网络范围的进 程间通信范畴,从而设计出一种更为一般化的进程间通信机制。这种努力的结果就是 socket机制,这 机制其实是命名管道在计算机网络环境下的实现和推广。 如果比较一下AT&T和BSD各自在这方面的努力,就可以看出,AT&T是有系统地、全面地对传 统的 Unix IPc加以改进。例奶,针对在某些应用中(传统 Unix IPc的)效率不够亮的缺点,设计和开 发了共亨内存机制;针对缺乏进程间同步于段的问题,又设计和开发了用户空间的信号量机制。另外 管道要占用打开文件号,便引入了“键值”的概念,从而避开了使用打开文件号。但是,AT&T的眼 光始终只盯着单一计算机中的进程间通信。而BSD则正好相反,它对传统Unix进程间通信的改进并 不是有系统的和仝而的,可是它的眼光却跳出了单机的范围。虽然scke机制在单机范围内与AT&T 的报文传递机制在概念上极为相似,但是却更为一般化,从而为后来网络技术的蓬勃发展做好了技术 准备。可以说, Sys v IPC和 socket是互相补充而不是各搞一套。 至于 Linux,则很白然地兼收并蓄,把二者都继承下来了。 顾名思义,一个 socket就好像一个通信线的插凵。只要通信的双方都有插口,并且两个插冂之间 有通信线蛴相连接,就可以互柑通信∫。从概念上说, socket与管道其实并无多人区别,如果把两个 Linux内核源代码情景分析〈下册 插口之间的“连线”比喻成“管道”,那么插口就相当于管道两端的“水龙头”,而且二者都表现为 打开文件。不问的是管道两端只能在同一台计算机上,而通过虚拟的“通信线路”相连接的两个描口 却可以分别存在于计算机网终中的不同节 当然,尽管二者在概念上相似,在具体的实现和使用 上却有着很大的不同。而且,管道所传递的是无结构的字节流,而通过 socket传递的则是有结构的报 文 一个插冂在逻辑上有三个特征,或者说三个要素,那就是网域、米型以及规程。 首先是网域,它丧明一个插口是用于哪一种网终,或者说哪族网络规程的。由于各种网络对节 点地址的命名方法不同,所以又称为“地址族”( address family)或“规程族”( protocol family)s例如 常数 AF INET表示互联网(英特网〕插口,所以各节点都使用IP地址;而 AF IPX则为 Novell的IPx 网插口,AFX25为X,25网插口,等等。其中竹个特例,那就是什么网也不是,只是在台计算机⊥ 用丁进程问通讯,BSD为这种特例定义的域名为 AF UNIX。后来,在 POSIX标准里又定义了一个 AF LOCAL,以示对别的操作系统也·视同仁。 其次为“类型”,它表明冇恻络中通信所遵循的模式。络通信有两种主要模式,一种称为“有连 接”或“面冋连接”( connection oriented)的通信;另一种则称为“无连接”( connectionless)通信。“有 迕接”模式常常又称为“虚电路”( virtual circuit)模式。在这种模式中,通信的双方嬖先通过定的 步骤在互相之间建立起一种虚拟的连接,或者说虚拟的线路,然后再通过虚拟的连接线路进行通信。 在通信的过程中,所有报文传递都保持着原来的次,报文在网络中传翰的过程中受到的不均匀延迟 会在接收端得到补偿。所以所有报文之间都是有关联的,每个报义都不是抓立的。更重要的是,在这 种模式中所有报文的传递都是“可靠”的,由內络屮勿埋通信线路引入的差错会由通信规程中的应答 和重发机制加以克服。同时,在这种模式中还提供了“流量控制”的手段。从用广的角度来看,有连 接”类型的插口对报文的传递作出了承诺。如果一个进程通过系统调用在一个“有连接”插口上发送 个报文,那么,只要进稞从这次系统调用常返冋,就说明该报文已经被递交到了接收方的插冂(但 接收方进程木必凵经读取这个报文)。“无连接”模式就不同了。“无连接”模式常常乂称为“数据包” ( datagram)模式,也称“面向报文”的通信模式( message oriented)。在“无迕接”模式中并不需要 事先在双方之间建立起“虚电路”,而直接就可以发送哦接报文,但是每个报文邵是狐立的,其止确 性也没有保证,甚全可能丟尖。如果两个报文穿越网络时走过∫不同的路径,或者甚至相同的路径, 但是受到了不…致的延迟,那么它们在接收端的次序就叫能与发送端的次序不同。所以,由“无连接 模式的插凵所提供的报文传递是不可靠的,它对用户作出的承诺只是“尽力传递”,但却是没有保证的。 此外,在“尤连接”模式中也没有“流量控制”手段。如果一个进稈通过系统调用在一个“无连接” 插口上发送一个报义,那么当进程从这次系统调用正常返时只是说叨该插冂将会例行公事地将报文 传递到接收方,但并不表示这报文已经到达了接收方的插口。从另一个角度,还可以说,“有连接”插 口的报文传递是同步的,而“无连接”插山的报文传递则是异步的 最后是“规程”,它戋眀休的网络规程。一殺来说,网域和类型结合在一起大体上就确定了适用 的规程。例如,要是网域为 AF INET,而类型为“无连接”,则规程基本上就是UDP了。但是,生有 些情况下还可能会有别的选拌,此时就山它来进一步明确只体的规程 其实,插口的这三个特征是互相联系的,归根结底就是反映了个插口所运行的(网络)规程 由于在每个插口的后面都隐藏着网络规程,对插口的比较详尽的讨论就势必要涉及到计算机网络这个 课题。要在本书中谈论计算机恻络,并进而分析 Linux内核中有关网络规程的代码是不实的,因为 那本身就已经足够构成另一本书的材料∫。所以,我们在本书将只讨论Unix域的插「1,也就是用于 同一計算机屮进程间通信的插口,隐藏在这种插口后而的规程是“汝有规程”。 2 第7章基于 socket的进程间通信 Uniⅸκ域的插口同样也分两种模式,但是二者都提供可靠的报文传递。在网络环境下,不可靠性是 由网络的基础设施(如物理线路)引起的,两种不同模式实际上:反映了对待物理介质的不可靠性的不 同态度和策略。“有连接”模式采取了“大包大揽”的态度,企图在不可靠物理介质的基础上构筑起· 层可靠的报文传递机制。而“无连接”模式则采取了“矛盾上交”的态度,说“既然物理介质不可靠, 那我也没有办法,只能有什么给你什么”,让用户自去设法克服或避免由此而引起的问题。可是,Unix 域的插口既然只提供同一台计算机上的进程间通信,而根本就不涉及网络设施,其物理介质实际上就 是內存,那就根本不存在由物理介质引入的不可靠性。不过,尽管Umix域插口的两种模式都提供可靠 的报文传递,…者还是有区别的,读完本节以后就会清楚这些区别。 像对 Sys V IPC操作一样, Linux内核为所有与 socket有关的操作提供个统一的系统调用入口, 但是在用户程序界面上则通过C语言程序库cib提供诸多库函数,看起来就好像都是独立的系统调用 样。内核中为 socket设置的总入口为 sys_socketed(),其代码在 net/socket. c中 1513 System call vectors 1514 水 1515 Argument checking cleaned up. Saved 20% in size 1516 This function doesn 't need to set the kernel lock because 1517 it is set by the callees. l518 1519 1520 asmlinkage long sys socketcall(int call, unsigned long *args) 1521 1522 unsigned ng a unsigned long a0, al 1524 ant crr. 1526 if (call<1 icall>SYS RECVMSG, 1527 return -EINVAl 1528 1529 /* copy from user should be SMP safe. * 1530 if (copy from user(a, args, nargs[calll)) 1531 return -EFAULT 1532 1533 1534 1535 1536 switch(call) 1537 1538 case SYS SOCKET: 1539 err = sys socket(a0, al, a[2n) break 1541 case sYS bind err sys bind(ao, (strucT sockaddr *al, a[2]) 1543 break 1544 case sYs connect Linuκ内核源代码情景分析(卜册) 1545 err sys connect(a0, (struct sockaddr *)al, a[21 1546 break 1547 case SYS LIsten 1548 err=sys listena0, a1 1549 break 1550 Casc SYS aCCePt 1551 err=sys accept(ao, (struct sockaddr *)al,(int *)a[21) 1552 1553 case sys GetsocKname 1554 err sys get. sockname(a0,(struc t. sockaddr al,(int *al2J 1555 break 1556 case sYs getpeername 1557 err =sys gelpeername(a0, (struct sockacdr *)al,(int *)a[2]) break 1559 case sYs socKetPair 1560 err= sys socketpair(a0, al, a[2, (int *)a[3) 1561 break 1562 case SYs send 1563 err sys send (ao, (void *al, a[2], a[3]) l564 break 1565 case SyS sendto err= sys sendto(a0, (void *al, a[2], a[3l 1567 ( struct sockaddr米)a「41,a[5]) 1568 brea k 1569 case SYS rEcv 1570 err- sys recv(aO 1571 1572 case Sys reCvfrom 1573 err sys recevfrom(ao, (void al, a[2], a[3] 1574 (struct sockaddr *)a[4,(int *a5] 1576 case sys ShutdoWn 577 err ys shutdown (ao, al) 1578 break 579 case sYs setsocKoPt 1580 r=sys setsockopt(a0, a1, a[2, (char *a3 a[4D 1581 case SYS GETSOCKOPt s getsockopt(a0, al, a[2],(char *ai3],(int *)a[4]) 584 break case Sys seNdMsG err= sys sendmsg(ao, (struct msghdr *)al, a[2]) re 1588 case sys recvmsg 1589 sys recv Isg(a0, ( struct msghdr *)al, a[2]) break 1591 de fault 1592 INaL 【实例截图】
【核心代码】

标签:

实例下载地址

LINUX内核源代码情景分析(下).pdf

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警