注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

【Learn】理解LFS  

2008-12-10 01:31:16|  分类: History |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
声明:这篇文章只是为自己理解LFS而勾勒粗略轮廓,其中很多说法或者大多数说法都不严谨,只是提供一种思路,这篇文章只具备启发意义,作为抛砖引玉之用,不具备借鉴、学习价值。另外,语句结构不通顺,因为目标只是自己能看懂。没有设为私有,是为不登陆也能看比较方便。特此声明。
========================================================================================
对LFS的组成包进行分类后,大吃一惊,类似于内存查看,进程管理等,居然是用户层面的事情,而内核只是提供系统调用,这些工具借助内核的系统调用完成这些事情。如果从这个角度(应用程序的视角,并且是应用程序调用系统调用完成它所要完成的功能的角度),Kernel也只是一个类库(吐字不清读成内裤,呵呵),不过这个类库可不简单,它是一个复杂的类库,或者把它看成一个庞大函数,对外提供功能不同的各种函数接口。
了解到这里,要理解Linux系统结构,需要做的事情是:1,了解系统调用,2,了解POSIX、LSB以及常见的库函数,尤其是Glibc,3,熟悉这些常用包。Debian有1.5万个包,但常用的也就LFS涉及到的这四五十个,即使常规应用,也不过两三百个,基本上不超出BLFS所涉及的范围。
曾经尝试阅读GRUB的那两个asm文件,到头来还是没读懂,不过有件收获就是,明白了有系统调用可以用是多么幸福的一件事情。想想如果没有文件管理,自己去读写磁盘,还要考虑扇区,并且处理二进制的编码,又要处理文件格式,还要区分文本文件和binary文件。
其中,个人认为,最关键的一步是认识到内核的有限功能。内核尽可能地压缩自己的功能,任何应用性质的功能,都不是内核需要完成的任务。内核不等同于一个计算机系统。内核、类库、内核扩展工具、系统工具、基础工具共同构成一个可用的计算机系统,而这些合称为系统软件,这是与应用软件相对应的。
内核是懒惰的,从对外接口上看,它只有三大任务:硬件管理框架、进程管理框架、以及系统调用。应用性质的硬件管理和进程管理以及除此之外的计算机管理,都是由单独的应用层的程序完成,它们一般需要借助系统调用的支持。
Kernel的模块构成、对硬件的管理、应用程序与Kernel的交互、Kernel对系统的控制与管理、系统调用、头文件C库以及Posix。这是我对内核需要学习的内容。
之后,站在内核的角度去理解其他软件包和系统构成。

内核仍然像是一个有穷状态机,从本质上看,它只是扩大了功能的CPU,其实内核与CPU的功能可以相互推脱,完全可以把内核的所有功能都由CPU完成。但,软件的好处是可升级性和良好的可扩展性。
内核是一台有穷状态机,它自己按照内部既定的逻辑运行,而不需要用户的干预。所以,任何交互性的功能与操作(包括系统管理),都不是内核的范畴,需要在系统调用的基础上,编写应用程序去实现。比如kdb、procps、psmisc之类的工具包,或者是Grub之类的引导包,也或者E2fsprogs、udev等。
内核仅有的交互功能就是SCI,用户也只能通过sysem_call()这个接口,以机器语言的方式,进行交互(编程的方式,因为程序需要便以为二进制代码才能运行)。从这个层面看,CPU提供的特权模式,其实与用户是没什么关系的。因为它被内核独占,而且内核只有一个sysem_call()接口与用户交互。
没有操作系统的机器是裸机,有了内核的机器才是一台可用的,有意义的有穷状态机。
可以把硬件、BIOS、Grub和内核构成的整体看做一台广义上的有穷状态机。这称为扩展机器。扩展机器+类库+系统工具=计算机系统。计算机系统+应用程序=可用的计算机系统。
扩展机器的只由程序进行使用,它是面向程序的,扩展机器与程序交互的接口是扩展了的机器语言(屏蔽了专用指令和特权模式,并增加了系统调用),这种扩展的机器语言是外界(人和应用程序逻辑)与扩展机器进行交互的协议和规范。可以把这种扩展的机器语言当作一份协议来理解,类似TCP/IP。其中,对扩展机器的操作,必须使用SCI,而原始的机器语言,只用来构建应用程序的逻辑。所有对扩展机器的操作,必须请求SCI才能完成。
理解这个扩展机器非常重要。明白它的职责和交互方式。
扩展机器并不排斥与人的直接沟通,但前提是必须遵循它所定义的接口规范(机器语言+SCI),而这并非人的特长,所以出现了一系列的应用程序,来辅助人完成这件事。从扩展机器的视角看,这些应用程序,比如free、fdisk、bash都是用来辅助人来完成这个交互的。交流的两方:一方是扩展机器,另一方是Bash+各种系统工具+人这些系统工具,属于人的这一方,它们只是人的附属,是人不可分割的一部分因为它们是工具,工具的作用只是延长人的手臂。这是系统管理和应用的视角看,计算机系统是如何构成的。
从应用程序开发的角度看计算机系统的构成,可以分为2层:1,扩展机器。2,程序。其中,程序又可以细化为两层层:1,类库;2,可执行程序代码。对于扩展机器一方面,这里只关注扩展机器的运行和应用,并不涉及扩展的机器的生产和组装(如内核开发和系统安装),而对于程序这一端,还需要关注程序的生成和引导。人的思想+编辑器------>source code。 source code+编译器-----------> 能调用类库或直接与扩展机器交互的二进制程序代码。程序的生成过程是一个水平分块,而扩展机器+类库+程序则是纵向分层。
再从人的角度看,人根本接触不到扩展机器,人生活在类库、编译器、系统工具构建起来的世界中。现在要关注的就是,这个世界是怎么构筑起来的。
首先,了解扩展机器的结构,熟悉扩展机器定义的交互协议。然后,掌握类库,熟练使用开发工具,理解系统管理工具。并且,会用系统脚本,明白系统结构,能够组装系统。
待续。。。。

  评论这张
 
阅读(287)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017