对称多处理器(SMP,Symmetrical Multi-Processing):一个计算机拥有多个CPU,其中最常见的一种形式。
多核处理器(Multi-core Processor):将多个处理器“合并在一起打包出售”,这些“被打包”的处理器之间共享比较昂贵的缓存部件,只保留多个核心并且以一个处理器的外包装进行出售。

接口上面为使用者,下面为提供者。

内存不够怎么办?

假设我们的计算机有128MB内存,程序A运行需要10MB,程序B需要100MB,程序C需要20MB。如果我们需要同时运行程序A和B,那么比较直接的做法是将内存的前10MB分配给程序A,10MB~110MB分配给B。这样就能够实现A和B两个程序同时运行,但是这种简单的内存分配策略问题很多.

  1. 地址空间不隔离:程序所使用的内存空间不是相互隔离的,恶意的程序、臭虫的程序改写了其他程序的数据(内存数据),使其他程序崩溃 无法保证 安全稳定的计算机环境。
  2. 内存使用效率低:无有效的内存管理机制,大量的数据再换入换出,导致效率十分低下。
  3. 程序运行的地址不确定:程序每次需要装入运行时,要给它从内存中分配一块足够大的空闲区域,此区域位置会不确定因此在编写时为固定所以设计程序的重定位问题。

解决方案
增加中间层,即使用一种间接地址访问方法
把程序给出的地址看作是一种虚拟地址然后通过某些映射的方法:将虚拟地址———>实际的物理地址。
若能妥善控制这个映射过程,就可以保证任一程序,访问的物理内存区域和另外一个程序相互不重叠达到地址隔离

隔离:每个进程都有自己独立的虚拟空间,而且每个进程智能访问自己的地址空间。

分段

线程


饿死现象
在优先级调度下,一个线程被饿死,是说它的优先级较低,在它执行之前,总是有较高优先级的线程试图执行,因此这个低优先级线程始终无法执行。当一个CPU密集型的线程获得较高的优先级时,许多低优先级的进程就很可能饿死。而一个高优先级的IO密集型线程由于大部分时间都处于等待状态,因此相对不容易造成其他线程饿死。
避免饿死现象:调度系统常常会逐步提升那些等待了过长时间的得不到执行的线程的优先级。在这样的手段下,一个线程只要等待足够长的时间,其优先级一定会提高到足够让它执行的程度。

在优先级调度的环境下,线程的优先级改变一般有三种方式。

  1. 用户指定优先级。
  2. 根据进入等待状态的频繁程度提升或降低优先级。
  3. 长时间得不到执行而被提升优先级。

线程主动放弃执行无非两种情况

  1. 当线程试图等待某事件时(I/O等)。
  2. 线程主动放弃时间片。

Linux的多线程

fork 复制当前进程
fork函数产生一个和当前进程完全一样的新进程,并和当前进程一样从fork函数里返回,例如如下代码:

pid_t pid;
if(pid =fork())
{...}

注:调用该命令后,新任务将启动并和本任务一起从fork函数返回。不同的时本任务的fork返回新任务的pid,新任务的fork将返回0.

fork复制的特殊性
fork产生新任务速度非常快,并不复制原任务的内存空间,而是和原任务一起共享一个写时复制的内存空间。
配合exec一起使用,调用exec来执行新的可执行文件
fork和exec通常用于产生新任务。

**

线程安全与多线程

1.6.2 线程安全**
多线程程序处于一个多变的环境中,可访问的全局变量和堆数据随时都可能被其他的线程改变,因此多线程程序在并发时数据的一致性变得很重要。
竞争和原子操作
例如:自增(++)操作在多线程环境下会出现错误是因为这个操作被编译成汇编代码时不止一条指令,因此在执行的时候容易被打断。
原子的(Atomic):单指令操作。 单挑指令的执行是不会被打断的。
在Windows下的一套API专门进行一些原子操作如图所示

同步与锁

可重入和线程安全
一个函数要被重入,只有两种情况

  1. 多个线程同时执行这个函数。
  2. 函数自身(可能是经过多层调用之后)调用自身。

可重入函数的特点

  1. 不使用任何(局部)静态或全局的非const变量。
  2. 不返回任何(局部)静态或全局的非const变量的指针。
  3. 仅依赖于调用方提供的参数。
  4. 不依赖任何单个资源的锁(mutex等)。不调用任何不可重入的函数。
  5. 可重入是并发安全的强力保障,一个可重入的函数可以在多线程环境下放心使用。

读后感受
从攻克方面来说对于计算机新人来说也许较难理解,专业名词过于多。有些抽象的概念也很难以理解,要有相关知识的积累才能一点一点的真正理解该内容,对于此部分要做到能够大致说清,没必要死记硬背官方的答案。总结知识点也要有着重的部分,这仅仅是本书的第一章开篇了解了一些知识才能“温故而知新”。

程序员的自我修养--链接、装载与库笔记:第一章温故而知新相关推荐

  1. 【《程序员的自我修养---链接装载于库》读书笔记】可执行文件的装载与进程

    系列文章目录 [<程序员的自我修养-链接装载于库>读书笔记]初探ELF [<程序员的自我修养-链接装载于库>读书笔记]windows PE/COFF [<程序员的自我修养 ...

  2. 《程序员的自我修养-链接-装载与库》第三章 目标文件里有什么(1)

    目录 0.引言 1.目标文件的格式 1.1 目标文件的格式及ELF文件格式的文件的分类 1.2 目标文件与可执行文件格式的小历史 2.目标文件是什么样的 2.1 程序与目标文件简介 2.2 BSS历史 ...

  3. 【读书笔记】【程序员的自我修养 -- 链接、装载与库(三)】函数调用与栈(this指针、返回值传递临时对象构建栈、运行库与多线程、_main函数、系统调用与中断向量表、Win32、可变参数、大小端

    文章目录 前言 介绍 内存 内存布局 栈与调用惯例 堆与内存管理 运行库 入口函数和程序初始化 C/C++运行库 运行库与多线程 C++全局构造与析构 fread 实现 系统调用与API 系统调用介绍 ...

  4. 程序员的自我修养—链接、装载与库 笔记

    程序员的自我修养-链接.装载与库 笔记 内存管理 直接使用物理内存地址 虚拟内存-分段 虚拟内存-分页 分页和分段的主要区别 段页式 代码生成过程 预处理 编译 词法分析 语法分析 语义分析 源代码优 ...

  5. 《程序员的自我修养—链接、装载与库》pdf书签,目录分享

    在网上下载到<程序员的自我修养-链接.装载与库>pdf版本,拜读之后受益匪浅,但是因为下载的pdf没有书签,所以想要查找某一章的内容不是很方便,于是自己制作了一下书签文件,将书签文件导入p ...

  6. 【读书笔记】【程序员的自我修养 -- 链接、装载与库(二)】进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接

    文章目录 前言 介绍 可执行文件的装载与进程 进程虚拟地址空间 装载方式 操作系统对可执行文件的装载 进程虚存空间分布 ELF文件的链接视图和执行视图 堆和栈 Linux 内核装载ELF & ...

  7. 《程序员的自我修养--链接、装载与库》笔记

    写在前面:本文是我在阅读<程序员的自我修养–链接.装载与库>一书时做的笔记,所谓好记性不如烂笔头嘛,其中主要摘抄记录了本人着重阅读的章节:除此之外还有小部分本人对书中内容的个人理解.以及文 ...

  8. 《程序员的自我修养--链接、装载与库》学习笔记(一)

    本系列文章是<程序员的自我修养–链接.装载与库>(电子工业出版社)一书的学习摘录笔记,本文是书中1.1至1.4部分. 文章目录 基础概念 硬件 软件 基础概念 #include <s ...

  9. 程序员的自我修养——链接、装载与库 笔记(一)

    程序员的自我修养   悄咪咪的说一句,这篇文章可能需要对计算机有过系统的学习,不然看着可能一脸懵.如果有疑问的话,当然,很可能是我太菜了,写的不好,欢迎大家评论区留言指教!此笔记只是刚刚开始,后续我会 ...

  10. 程序员的自我修养--链接、装载与库笔记:总结

    <程序员的自我修养----链接.装载与库>这本书是2009年出版的,书中有些内容的介绍可能已经过时,已不再适用于现在的C/C++开发,而且书中展示的结果均是在32位机上进行的操作,这里全部 ...

最新文章

  1. zBrow压力测试图
  2. stm32 IAP在线升级的个人经验以及实现方法
  3. 【算法】SVM分类精度为0,结果很烂怎么办?
  4. Science上发表的超赞聚类算法
  5. VS项目属性的一些配置项的总结
  6. 快照是什么?揭秘存储快照的实现
  7. 花三千块钱求推荐一个靠谱的C++工程师
  8. Java原生API操作XML
  9. Nginx静态资源POST请求返回405状态
  10. mPaas集成项目、新建mPaaS项目
  11. STC单片机烧录时的坑不要踩
  12. 统计学习基础(ESL)中文版
  13. 外部碎片和内部碎片的区别
  14. 双轴旋转云台plc控制_Robomaster电控入门(7)双轴云台控制
  15. C语言 近似求PI
  16. pip命令卸载所有库
  17. fMRI预处理-DPABI
  18. [转载]无盘网吧实际施工过程中的注意事项(转)
  19. springboot整合liquibase(补充)
  20. 力扣-594-最长和谐子序列-map 《count》

热门文章

  1. win 通过 Distro 安装 linux 子系统
  2. 编写一个触发器:当修改一个学生专业的时候(转专业),则自动将本学期新专业同学全都选修的课程给该同学选修
  3. 利用python做微信公众号标题的词云图
  4. 未来的技术型人才,社会杰出人物的java人生实时记录
  5. syslog 向内存中缓存_内存问题排查手段及相关文件介绍
  6. 坚持是一种态度,公众号粉丝突破 1300 啦
  7. 嗨购,共享购商业模式,让你的店铺盈利更轻松
  8. 共享充电宝有什么好拍? | 拍者手记
  9. 博雅数智|第四次直播|PageRank算法
  10. gui开头的歌词_首字拼音是gui的成语-以gui开头的成语大全「溜趣成语网」