Linux内核入门(四)—— 内核汇编语言规则
任何一个用高级语言编写的操作系统,其内核源代码中总有少部分代码是用汇编语言编写的。读
过Unix Sys V源代码的读者都知道,在其约3万行的核心代码中用汇编语言编写的代码约2000行,分
成不到20个扩展名为.s和.m的文件,其中大部分是关于中断与异常处理的底层程序,还有就是与初始
化有关的程序以及一些核心代码中调用的公用子程序。
用汇编语言编写核心代码中的部分代码,大体上是出于如下几个方面的考虑的:
●
操作系统内核中的底层程序直接与硬件打交道,需要用到一些专用的指令,而这些指令在C
语言中并无对应的语言成分。例如,在386系统结构中,对外设的输入/输出指令如inb, outb
等均无对应的C语言语句。因此,这些底层的操作需要用汇编语言来编写。CPU中的一些对
寄存器的操作也是一样,例如,要设置一个段寄存器时,也只好用汇编语言来编写。
●
CPU中的一些特殊指令也没有对应的C语言成分,如关中断,开中断等等。此外,在同一种
系统结构的不同CPU芯片中,特别是新开发出来的芯片中,往往会增加一些新的指令,例如
Pentium, Pentium II和Pentium MMX,都在原来的基础土扩充了新的指令,对这些指令的使用
也得用汇编语言。
●
内核中实现某些操作的过程、程序段或函数,在运行时会非常频繁地被调用,因此其(时间)
效率就显得很重要。而用汇编语言编写的程序,在算法和数据结构相同的条件下,其效率通常
要比用高级语言编写的高。在此类程序或程序段中,往往每一条汇编指令的使用都需要经过推
敲。系统调用的进入和返回就是一个典型的例子。系统调用的进出是非常频繁用到的过程,每
秒钟可能会用到成千上万次,其时间效率可谓举足轻重。再说,系统调用的进出过程还牵涉到
用户空间和系统空间之间的来回切换,而用于这个目的的一些指令在C语言中本来就没有对
应的语言成分,所以,系统调用的进入和返回显然必须用汇编语言来编写。
●
在某些特殊的场合,一段程序的空间效率也会显得非常重要。操作系统的引异程序就是一个例
子。系统的引导程序通常一定要能容纳在磁盘上的第一个扇区中。这时候,哪怕这段程序的大
相关文档:
看linux内核很容易被struct address_space 这个结构迷惑,它是代表某个地址空间吗?实际上不是的,它是用于管理文件(struct inode)映射到内存的页面(struct page)的;与之对应,address_space_operations 就是用来操作该文件映射到内存的页面,比如把内存中的修改写回文件、从文件中读入数据到页面缓冲等。
& ......
由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。
一、 UNIX下关于文件权限的表示方法和解析
SUID 是 Set User ID, SGID 是 Set Group ID的意思。
UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面 ......
前提:linux在虚拟机上,暂不知道不在虚拟机上情况是怎样的。使用host-only联网。
1.安装serv-u
2.linux上设置ip,使之与window上Vmnet1连接的ip在一个网段。原因可能是,win上的Vmnet1相当于主机(192.168.1.1)。
vi /etc/sysconfig/network-scripts/ifcfg-eth0 :
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR ......
Linux中定时器的算法实现
定时器的作用
定时器在操作系统中起到了举足轻重的作用。在做IO操作时,需要超时机制保证任务不处于无休止的等待状态;在延时处理时,可以通过“闹表”进行相对准点的唤醒操作。在多任务操作系统中,定时器是一种非常常用的资源。
对于熟悉硬件 ......