操作系统

老化算法,工作时钟算法,装载时重定位


外部中断,就是我们通常所说的中断(interrupt)。对于执行的系统来说,这种中断发生完全是"异步"的,根本无法预测到此类中断会在什么时候发生。
因此,CPU(或者软件)对于此类外部中断完全是"被动"的。不过,软件可以通过关中断的形式来关闭对中断的响应,把它"反映情况"的途径掐断,这样就眼不见心不烦了。


 


软件产生的中断则不同,它是由专设的指令,如Intel X86的"INT n",在程序中有意地产生,所以是主动的,"同步"的。只要CPU一执行一条int指令,就知道在开始执行
下一条指令之前一定要先进入中断服务程序,这种主动的中断我们称之为"陷阱"。


 


此外,还有一种与中断相似的机制称之为"异常"(exception),一般也是异步的,多半是由于"不小心"犯了规才发生的。例如,当你在程序中发出一条除法指令div,而除数为零时
就会发生一次异常。这多半是由于不小心,而不是故意的,所以这也是被动的。当然,我们的确可以故意除以零,呵呵,这个就有点强词夺理了。


 


我终结一下,中断和异常有个比较大的共同点就是"不可预知性",所以是被迫的;而陷阱有"有意为之"的含义。其实,这种东西了解即可,做系统编程的时候身边备上一本Intel手册即可。


http://www.cnblogs.com/onepeace/p/5066736.html,注意段页式管理时,图中物理内存地址计算时,是段表首地址(与段首地址区分),是页表首地址(与页首地址区分)


预处理在编译前需要做的工作,预处理主要处理三部分东西头文件和宏还有条件编绎


与函数栈从高地址向低地址的增长方向 及函数调用时参数从右向左的压栈顺序


参数在堆栈中分布:
在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,
堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,
依次是:函数参数列表,函数返回地址,函数执行代码段.
 堆栈中,各个函数的分布情况是倒序的.即最后一个参数在列表中地址最高部分,第一个参数在列表地址的最低部分.
参数在堆栈中的分布情况如下:
最后一个参数 
倒数第二个参数 
... 
第一个参数 
函数返回地址 
函数代码段


而在UNIX系统中,无论文本文件还是二进制文件都
是由一串字节组成, t和b没有区分,用哪个都一样,也可以省略不写。


栈缓冲区溢出(stack buffer overflow或stack buffer overrun)是计算机程序把数据写入调用栈上的内存时超出了数据结构的边界。[1][2]栈缓冲区溢出是缓冲区溢出的一种。
[1] 这会损坏相邻数据的值,引发程序崩溃或者修改了函数返回地址从而导致执行恶意的程序。这种攻击方式称为stack smashing。可被用于注入可执行代码、接管进程的执行。
是最为古老的黑客攻击行为之一。[3][4][5]


局部变量,如果要初始化,每次调用函数里,编译器都要初始化函数栈空间,这太费性能了。但是c的编译器会初始化静态变量为0,因为这只是在启动程序时的动作。
全局变量同样会被初始化。


结构体中内存对齐问题:


 a.第一个成员起始于0偏移处


    b.每个成员按其类型大小和指定对齐参数n中较小的一个进行对齐


    c.结构体总长度必须为所有对齐参数(最大类型长度)的整数倍


    d.对于数组,可以拆开看做n个数组元素
    e.结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int 
,double等元素,那b应该从8的整数倍开始存储.) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值