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

对称多处理器(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专门进行一些原子操作如图所示
Interlocked API
同步与锁

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

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

可重入函数的特点

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1 University students can understand innovation through learning from the past. 2. Students can better review by breaking down complex concepts into smaller components and studying the material in an organized way. 3. When learning from the past to understand innovation, it is important to focus on understanding the big picture and to not get bogged down in the details. ### 回答2: 1. 大学生如何理解温故而? 温故而是一种学习方法,它要求我们在学习识之前先回顾和巩固已经学过的识。大学生理解温故而意味着要在学习识之前,先回顾和复习以前学过的相关识或基础识。通过温故,我们能够加深对已有识的理解和记忆,从而更好地理解和掌握识。 2. 学生如何更好地去复习? 学生要更好地复习,可以采取以下策略: 首先,制定一个合理的复习计划,将要复习的内容分配到不同的时间段,确保每个科目都有足够的时间。 其次,采用多种复习方法,如阅读教材、做练习题、参加讨论等,以帮助加深理解和牢固记忆。 另外,与同学或老师一起讨论复习内容,通过讲解和互动来加深理解。 此外,保持良好的学习习惯,比如及时复习、做好笔记等,能够帮助学生更好地掌握和复习识。 3. 温故而的过程需要注意什么? 在温故而的过程中,需要注意以下几点: 首先,要有针对性,根据自己的学习需求和复习目标,选择性地回顾和复习相关识点。 其次,要有系统性,将复习内容进行分类整理,形成一个清晰的识框架,有助于加深理解和记忆。 另外,要关注重难点,重点复习那些相对较难或容易遗忘的识点,加强对这些内容的学习和理解。 还要有耐心和恒心,温故而是一个持续的过程,需要长期坚持和不断巩固。 最后,要善于总结和归纳,通过整理和回顾复习过程中的笔记和练习,提炼出关键概念和思维模式,便于记忆和应用。 ### 回答3: 1. 大学生如何理解温故而? 大学生可以理解为通过回顾过去的识和经验,来获取的见解和理解。温故是指回顾已经学过的识,了解其中的原理、概念和重要点。而则是指通过对识的学习,扩展和更自己的识体系。温故而相辅相成,是一个持续学习和发展的过程。 2. 学生如何更好地去复习? 学生可以通过以下方式更好地进行复习: - 制定合理的复习计划:根据时间安排和课程难度,合理分配复习时间,确保每个学科都有足够的复习时间。 - 多种复习方法结合:采用不同的学习方式,如阅读教材、做练习题、参与讨论、制作思维导图等,帮助巩固记忆和理解识。 - 主动参与课堂:积极参与讨论和提问,与同学和老师交流,加深对识的理解和记忆。 - 不断反思和总结:及时检查自己的复习情况,发现不足和问题,并及时调整学习方法和计划。 3. 温故而的过程需要注意什么? 在温故而的过程中,学生需要注意以下几点: - 有目的性地温故:针对具体的识点或者问题进行回顾,明确自己的学习目标和重点。 - 理解和记忆结合:不仅要理解概念和原理,还要通过多次的复习和记忆,帮助信息在大脑中形成长期记忆。 - 理论联系实际:将学到的识应用到实际情境中,加深对识的理解和记忆。 - 及时巩固复习成果:通过做练习题、整理笔记、与同学讨论等方式,巩固复习的成果,确保识掌握得更牢固。 - 长期持续学习:温故而是一个持续的过程,要保持学习的热情和动力,不断更自己的识体系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值