程序员的自我修养 读书笔记 chp1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhyh1435589631/article/details/52932199

1. 前言

知乎上面好多推荐看这本书的, 今天拿起来看看, 做些笔记

2. 笔记

1.2 万变不离其宗

  1. 计算机硬件中几个关键部件:
    1. 中央处理器cpu
    2. 内存
    3. IO控制芯片
  2. 硬件结构框架
    这里写图片描述
    北桥: 高速芯片 使用 PCI 总线
    南桥: 低速芯片 使用 ISA 总线
  3. SMP 和 多核
    1. 由于CPU的频率受到制作工艺限制,无法继续提升, 就采用增加cpu 数量提升性能
    2. 但是这个有点类似人月神话中的思想, 一个女人可以花10个月生一个孩子, 但是10个女人不能在一个月生一个孩子
    3. 多应用于需要处理大象请求的时候, 并且这些请求相互独立的情形

1.3 站得高,望得远

  1. 计算机体系结构中的一个名言:

    Any problem in computer science can be solved by another layer of indirection.

  2. 计算机软件体系结构
    这里写图片描述

1.4 操作系统做什么

  1. 操作系统的一个功能是提供抽象的接口, 另外一个是管理硬件资源

1.4.1 不要让cpu 打盹

  1. 多道程序运行系统
  2. 分时系统
  3. 多任务系统

1.4.2 设备驱动

1.5 内存不够怎么办

  1. 隔离
    1. 每个进程都有自己独立的虚拟地址空间, 每个进程只能访问自己的地址空间,从而达到进程隔离
  2. 分段
    1. 实现了地址的隔离,并且不用关心实际的物理地址(程序不需要重定位)
    2. 但是内存效率低, 以整个程序为单位进行换入换出操作
  3. 分页
    1. 实现地址隔离
    2. 内存效率高
    3. 不需要重定位
    4. 可以实现页面保护机制

1.6 众人拾柴火焰高

  1. 线程
    1. 访问权限
    2. 线程调度和优先级
    3. 几种运行状态
    4. 抢占特性
    5. linux 中的写时复制机制
  2. 线程安全
    1. 同步和锁
      1. 信号量: 在整个系统中可以被任意线程获取和释放, 进程间可用
      2. 互斥量: 谁污染谁治理, 进程间可用
      3. 临界区: 仅在本进程中有效, 出了本进程 不承认
      4. 读写锁: 线程同事读取ok, 但是写入需要同步
      5. 条件变量: 可以让多个线程一起等待某个事件的发生,事件发生的时候, 所有线程可以一起回复执行
    2. 可重入
      1. 不应使用任何静态或者全局非const变量
      2. 仅依赖调用方参数
      3. 不依赖任何单个资源的锁
      4. 不调用不可重入的函数
    3. 过度优化
      1. cpu 可能交换执行顺序, 或者将某个值写入寄存器
      2. 通过violate 阻止这一特性
  3. 多线程内部情况
    1. 一对一
      1. 高效, 但是内核线程数量有限, 内核调度上下文切换代价大
    2. 多对一
      1. 一个用户线程阻塞,所有线程都无法执行
    3. 多对多
      1. 上述两者的综合效果
展开阅读全文

没有更多推荐了,返回首页