当前位置: 代码迷 >> 综合 >> 《系统级编程》考点总结 一、名词解释
  详细解决方案

《系统级编程》考点总结 一、名词解释

热度:7   发布时间:2023-11-16 21:18:10.0

/*

*包括但不仅适于 四川大学软件学院。

*力求在质量上对《系统级编程》考生起到实质性的帮助。

*笔者系软件学院2016级学生,系统级编程期末88分 。

*/

系统级编程考点总结

一、名词解释

#前些年会直接考名词解释,后面几年算是应用题、简答题,这部分可以作为基础和梗概

预处理Preprocessing:

预处理器(cpp)根据字符串#开头的命令(directives),修改原始C程序,并把它直接插入到程序文本中。

编译Compile:

编译将文本文件(.i)翻译成文本文件(.s)包含一个汇编语言程序

汇编Assemple:

汇编器将(.s)翻译成机器语言指令,把机器指令打包成可重定位目标程序,并将结果保存在目标文件(.o)中

连接Link:

令连接器(ld)处理标准c库中调用的函数与原函数(目标文件)并合的过程,再生成一个可执行文件。

活动记录Activation Record:

函数调用时分配的一块内存,它通常在栈内被产生,也被栈的框架所调用。因为是在栈上产生和执行,又叫做帧栈,Stack Frame。#题目中二者同义,选择题、大题 重点考察。

缓存区溢出Buffer overflow:

字符串的长度超出了为数组分配的空间,所以重写了边界

垃圾回收Garbage collection:

垃圾回收是自动回收堆分配存储的过程

垃圾回收器Garbage collector:

垃圾回收器,一种动态内存分配器,它自动释放程序中不再需要的已分配的块。经常流行于面向对象语言中。

Timer计时器:

计时器保存时间特定的时间片段,时间一到,程序转向另一个状态或执行另一个操作。(计算机系统的组件,在某种程度上提供了测试时间的能力)

Profile:用于测量执行一个源代码所花费的时间的工具,可以显示程序的执行历史和提供必要分析,同时它也可以发现一个程序的瓶颈,所以我们可以使代码更加有效

Profiler:是一个找瓶颈发生地方的方式

 

Garbage collection methods垃圾回收的方法:

#会在选择题、简答题考,记下每个的名字和大致思路

1标记清除法(Mark & Sweep):在每一块的顶部使用一个额外的标记,使用完清除这个标记

2复制法:使用两个堆,把一个堆中的数据复制到另一个堆

3引用计数法:记录每个对象的指针数目,当计数为0时,该对象被认为是垃圾

4分代式垃圾回收法:频繁检查年轻对象是否为垃圾,较少地检查老的对象,应为我们认为年轻对象的生命周期短

 

Alignment对齐:要求某种类型的对象的地址必须是某个值K的倍数

How to Alignment对齐方式 :

1编译器在汇编代码中放入命令,指明全局数据所需的对齐

2对于有结构的代码,编译器可能需要在域的分配中插入间隙,以保证每个结构元素都满足它的对齐要求,而结构本身对它的起始地址也有一些要求

3编译器可能需要添加一些填充到结构的末尾,这样结构数组的每个元素都会满足它的对齐要求

Alignment rules:确保每种数据类型都是按照指定方式来组织和分配的,即每种类型对象都满足它的对齐限制就可以保证实施对齐

#注意数组、结构struct体、联合union体等不同数据结构的数据存储分配对齐方式,选择题计算考到

存储memory structure:

寄存器 —— L1高速缓存 —— L2 高速缓存 —— 主存储器(内存RAM) —— 本地磁盘 —— 其他远程存储

考点:1.计算命中率 2.摩尔定律、各个组件造价、大小、速度的比较  3.吞吐量的计算  4.求加速比 

Exception:异常,就是控制流中的突变,用来响应处理状态中的某些变化

异常主要包括以下几种类型,#选择题、简答题、大题!!!

类型         原因                   同异步           返回行为

中断         来自I/O设备的信号      异步            返回到下一条指令

陷阱         有意的异常              同步            返回到下一条指令

故障         潜在可恢复的错误        同步            可能返回到当前指令

终止         不可恢复的错误          同步            不会返回

 

缓存缺失Cache miss:

Cache Miss的两种类型

cold miss冷不命中:cache 为空导致

conflict miss冲突不命中:容量不足

 

Cache hit缓存命中:

当数据要K+1层某个数据对象d时,先在当前存储在K层的一个块中查找d,如d刚好缓存在K层中,则缓存命中。

Static memory allocation静态内存分配:

在程序编译,链接时分配地址的方法

Dynamic memory allocation动态内存分配:

在程序运行的时候分配地址空间

这里先说一下变量的内存分配原则,对于全局变量、静态全局变量,静态局部变量,这些编译器已知大小的变量类型,编译器在运行之前就对其分配空间。静态局部变量像静态全局变量一样,在内存的静态区分配,生命周期为整个程序的从运行到结束释放。静态局部变量在分配会被初始化,在函数的静态局部变量重复执行时不会再初始化,也不会被释放,而是接着上次的执行继续执行。静态局部变量区别于其他局部变量是:普通局部变量是临时的,编译器无法预知其空间和函数执行与否,而对其进行动态分配,也就是在运行时进行分配,执行过后释放。在C语言中,static声明的变量也被约束为仅本文件可以访问,其他文件访问时需要extern声明。

静态内存分配,在内存的静态区分配。动态内存分配,在堆或栈上分配。

注意1:malloc这种动态申请分配在堆上开辟空间,而函数的执行分配空间在栈上分配空间。

2.不同上的分配,从属和使命都不一样,管理的算法都不一样。

3.涉及到的一系列空间回收问题。

Synchronization:通过交换信息,使多个进程或线程能够协作他们的活动

Mutual exclusion:互斥,多个进程或者线程在一段时间内只能有一个进程或者线程独占访问共享对象。包括代码、数据和其他资源

Critical section:是一段访问共享资源的代码,当另一个进程已经在这段代码中运行时,这个进程就不能在这段代码中运行。

Race condition:多个线程或进程读写一个共享data时结果依赖于他们执行的先后顺序

#同步互斥的概念,其实也就是大二下操作系统课的内容。这一部分不熟悉的同学,可以参照操作系统的相关知识点,据说这一部分写代码的不会考了。但是选择题和简答题还是会考,注意概念区分。

用户模式下和内核模式的同步互斥实现方式:用户模式下,临界区。内核模式,信号量

Locality:时间局部性:刚用过的地址在不久的将来会再次被使用

              空间局部性:刚用过的地址的前后地址在不久的将来会被使用

#选择题、命中率大题,熟记类型

Optimal:优化,使代码更有效率,更小

#熟记优化的多种类型,可能会简单考概念

Memory alias:存储器别名,指向存储器同一位置的不同指针,妨碍优化 

Linker:将一个或多个由编译器合并的目标文件联合成一个单一的可执行程序

Loader:实现加载函数到主存中的系统程序

时间戳计数器 是奔腾兼容处理器中的一个计数器,它记录自启动以来处理器消耗的时钟周期数。由于时间戳计数器(TSC)随着处理器周期速率的比例的变化而变化,因此提供了非常高的精度。TSC通常被用于剖析和监测代码。使用rdtsc指令可测量某段代码的执行时间,其精度达到微秒级,TSC的节拍可以被转化为秒,方法是将其除以CPU时钟速率(在linux中,可以从内核变量cpu_khz读取)。#注意区分不同和计时有关的工具、作用、工作机理。