操作系统笔记

线程
1可以有效表达它的线索
2资源共享的时候开销少一点,切换的时候时间会省一点
3可以有效表达多CPU多核的那种情形

详见浙江大学操作系统课程p15-p22

逻辑地址里面内存的帧号是连续的,物理地址里面不是连续的
这就需要页表,页表保存了逻辑地址的页号到物理地址的页号的对应关系,用页表基址来指定初始位置,用页号坐下表查询页表这个数组,找到相应的页表项,帧号是页表项里面存的字段之一
反置页表是从物理地址到逻辑地址的映射,到反置页表里超找逻辑地址的页号和偏移,但hash可能会冲突,冲突就遍历逻辑页表

虚拟内存,段分配
实际内存,页分配
段页怎么结合呢,加一层虚拟内存,从程序的段逻辑地址指向虚拟内存的地址,再由虚拟内存映射到内存页(实际的内存地址)

为什么是((from>>20)&0xffc)不应该是(from>>22)么 因为((from>>20)&0xffc)相当于是(from>>22) 再左移两位相当于是(from>>22)x4 位与运算的作用是把最后两位置0

局部性规律

进入中断响应的第一步必须是保存现场 最后一步退出之前必须是恢复现场

void* malloc(size_t size) ;返回类型是 void*
1malloc申请的空间的大小是以字节为单位的
2返回的类型是void*,需要类型转换为自己需要的类型
例如 (int )malloc(nsizeof(int));

遗憾的是,很多程序员调用分配函数时(如malloc),使用算术表达式作为参数,并且不对这些表达式做溢出检查。产生漏洞(32位系统的上限是2^32,当参数结果超出这个范围就会产生溢出,所以需要对参数进行溢出检查)
详情见<<深入理解操作系统>>P69 P70页对XDR库中安全漏洞的分析。

程序效率优化
for(int i = 0; i < length(v);i++)
每次循环迭代都必须对循环限制条件求值,另一方面这个限制的大小可能并不会随着循环的进行而改变,因此只需要进行一次限制量的求值,然后一直在限制条件中使用这个值。
将length函数的调用移出循环测试,我们不需要每次循环迭代是都执行这个函数
int l = length(v);
for(int i = 0; i < l;i++)
无论是那种情况都需要这种变换来消除这个低效率,这个可能优化程序的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值