您的位置:首页 > 职场人生

《程序员的自我修养-链接加载与库》读书笔记(1)---基础知识储备

2009-07-17 01:04 337 查看
计算机是一个非常广泛的概念,拥有计算概念的都可以称作计算机;

各部件频率适配:
IO控制器:协调I/O设备和总线之间的速度
Cpu倍频:系统总线与内存频率一致,CPU采用倍频的方式与系统总线通信
北桥芯片:协调CPU、内存和高速图形设备,北桥也简称PCI桥,起汇聚作用
南桥芯片:磁盘、USB、键盘、鼠标等设备连接在南桥上,南桥汇总后连接到北桥

SMP与多核:
SMP:一个计算机拥有多个CPU,每个CPU的数量在系统中所处的地位和功能是一样的
SMP在处理大并发且独立的请求时非常有用
多核:多处理器成本很高,多个处理器共享昂贵的部件,只保留多个核心,以一个处理器的外包装出售

计算机领域的任何问题都可以通过增加中间层解决;

现代计算机体系结构从上而下严格遵从层级结构设计

系统软件成功商用并不断升级换代的重要前提:接口应该后项兼容,也即高版本接口功能应该是低版本的超集而不应该是交集;

API接口:提供者是运行库
系统调用:运行库调用,系统调用以软件中断实现,Linux使用0x80中断,win使用0x2E中断(win XP SP2前)
硬件接口决定了操作系统内核,一般由硬件厂商提供
我们编程时尽量使用运行库提供的API而避免使用系统调用,如打开文件,我们尽量使用fopen API尽量不要使用open系统调用,以避免系统频繁陷入内核态,减小系统开销

CPU调度策略:
多道程序设计:
某个程序暂停使用CPU时,监控程序调度另外等待的程序;
缺点:程序没有优先级概念
分时系统:
每个程序运行一段时间都主动让出CPU
缺点:系统任何一个程序死循环都可以导致死机,程序需要显式调用API让出CPU
多任务系统:
操作系统接管了所有硬件资源,且运行在内核态,其它进程运行在用户态,每个进程有独立地址空间,CPU由操作系统统一分配,根据优先级进行CPU调度;

设备驱动:
对硬件统一管理和抽象,提供统一的硬件访问方式,屏蔽用户直接读写硬件端口、处理硬件中断等;使用户更关注应用程序本身开发
具体来讲,操作系统厂商为硬件厂商提供一系列接口和框架规范,由厂商提供驱动;

硬盘结构:
一个硬盘à多个盘片à每个盘片分两面à每面分若干个磁道à每个磁道分为若干个扇区
目前硬盘使用逻辑扇区概念,扇区从0编号,一直到最后一个扇区

内存复用:
使用中间层解决
在32bit机器下,每个进程虚拟为4G空间
分段:
内存虚拟空间映射到物理空间
缺点:
内存不足,换出的是整个程序,涉及大量磁盘访问操作
分页:
利用程序局部性原理
地址空间且为固定大小的页,页大小由硬件决定,操作系统选择
地址访问触发页错误时由系统进行换页操作
cpu利用特殊硬件MMU进行也映射操作

线程:
是程序执行流程的最小单元
各个线程共享程序内存空间、文件描述符以及信号等
线程私有空间包括:栈、寄存器以及局部变量、TIS数据等
线程调度策略:
优先级调度:高优先级线程全部执行完毕时低优先级线程才得到调度,为防止饥饿,长时间得不到调度的低优先级线程会逐渐调高优先级
轮转法
I/O密集型线程比CPU密集型线程更易得到优先级提升
Linux下线程创建方法:
Fork:复制当前线程,通过写时复制提高复制速度,降低内存占用,fork只能产生父任务镜像
Exec:产生新的可执行镜像
Clone:创建子进程并从指定位置执行

为使得多线程下用户操作具有原子性,引入同步和锁的概念
mutex:二元信号量
信号灯:多元信号量

代码尽量设计为可充入的,重入特点如下:
不使用任何(局部)静态或全局 非const变量
不调用不可重入函数
不依赖锁
仅依赖调用者提供的参数

换言之,函数可重入应该是无状态且高内聚的

防止过度优化的方法:
使用volatile,防止编译器调整变量调用的指令顺序,防止将变量写到寄存器不写回
使用cpu指令 barrier阻止将该命令前的指令交换到该命令后
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: