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

计算机是一个非常广泛的概念,拥有计算概念的都可以称作计算机;

 

各部件频率适配

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阻止将该命令前的指令交换到该命令后

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值