第一章 温故知新

本文探讨了程序为何需要编译才能运行,详细解释了编译过程和可执行文件的组织方式。深入讲解了C语言库的作用,并概述了计算机硬件,如CPU和内存的工作原理。此外,还介绍了操作系统如何提升硬件利用率,包括CPU的多任务系统、设备驱动和虚拟内存的概念。文章还涉及线程、同步与锁以及操作系统中的线程模型,如一对一、多对一和多对多模型。
摘要由CSDN通过智能技术生成

“hello world”引发的思考:
1.程序为什么编译后才能运行?
2.编译过程?
3.编译出来的可执行文件是什么?怎么存放,组织的
4.C语言库是什么?

硬件主要:CPU 内存 I/O控制芯片(慢速的I/O设备和快速CPU实现交互)
CPU主频 目前最高4GHZ 受限于制造工艺

计算机体系:计算机科学领域任何问题都可以通过增加一个间接的中间层解决

系统调用接口通常通过中断实现

操作系统:尽可能压榨计算机硬件潜力
1.CPU 多任务系统
2.设备驱动 硬件驱动可看成操作系统一部分,和内核一起运行在特权级,但之间又有一定独立性
3.内存不够 直接运行在物理内存(地址空间不隔离 内存使用率低 程序每次重新运行的地址不确定)

虚拟内存 : 例如32位 2^32 = 4G 所以每个进程都有4G空间
通过分段,把需要用到的虚拟内存等价映射到物理空间,解决了空间不隔离和每次运行地址不确定
分页 分4kb页大小 常用的放在内存 不常用的放到磁盘 通过MMU实现页映射

线程 线程ID + 当前指令指针(PC)+ 寄存器集合 + 堆栈

LINUX 线程就是进程 都属于任务范畴 每个任务类似单线程的进程
fork + exec 产生新任务 单fork属于写时复制
clone 产生新的线程

线程安全
原子操作: 单条指令不会被打断 操作方便 但只适用简单场合
同步与锁: 二元信号量、互斥量(同二元信号量)、临界区(限定部分线程) 、读写锁(更特定场合 可以多个读 )

多线程和内核线程
一对一 多对一 多对多 (基本用这个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值