![](https://img-blog.csdnimg.cn/20200228103221476.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
=>计算机系统
计算机系统,开启底层世界
飞翔的哈士奇
帐号已弃更,转Github(DelinQu) — 2021.05
展开
-
异常与进程
一.控制流(1)什么是控制流从加电开始工作,到断电停止工作,CPU就是读并执行(解释)指令序列, 一次一条指令这个序列就是处理器控制流(CPU’s control flow or flow of control)(2)两种机制可改变控制流分支与跳转 Jumps and branches调用与返回 Call and return上述两者均是相应程序状态的变化(分支,循环,子程序调用)(3)异常控制流系统需要一种机制来处理上述“异常控制流(exceptional cont原创 2020-06-17 20:18:36 · 580 阅读 · 0 评论 -
高速缓存模型cache
一. 存储层次中的各种缓存二. 高速缓存模型(1)cache组成包括三个部分:v t Bcache内部有S=2^s组,每组有E=2^e行,每行的结构如下:包括有效位v,标志位tag,以及块,每块的大小是B=2^b字节(2)地址地址包括三个部分t s b:t 标记位:对应cache中行的标记位s组索引:对应cache的组号b块偏移:对饮cache行中的数据块偏移量三. 不命中分类冷不命中(强制不命中)如果缓存是空的,则对任何数据的访问都是不命中的, 属于短暂事件原创 2020-06-16 16:08:27 · 1090 阅读 · 0 评论 -
存储层次
一. 随机访问存储器 RAM(Random Access Memory)随机访问存储器 (RAM)关键特性RAM 一般封装成芯片形式基本存储单元是 cell 单元多个RAM芯片构成内存RAM的分类RAM可以被分为静态SRAM和动态DRAM静态随机访问存储器每个单元保存一位(bit),含4~6个晶体管电路只要保持供电,就会永远保持它的值是cache的组成部分动态随机存储器(DRAM)每位存储是对一个电容的放电,每个单元由一个电容和一个访问晶体管组成每10~100ms...原创 2020-06-16 11:36:28 · 671 阅读 · 0 评论 -
冯诺依曼结构体系和CPU的指令周期
一.冯诺依曼结构体系计算机5大组成计算机由控制器(分析和执行机器指令并控制各部件的协同工作)运算器(根据控 制信号对数据进行算术运算和逻辑运算)存储器(内存存储中间结果,外存存储需 要长期保存的信息)输入设备(接收外界信息)输出设备(向外界输送信息)五大部件组成运算单元包含算术逻辑单元和处理器寄存器(可快速访问的数据存储)控制单元包含一个指令寄存器(保留当前正在执行或解码的指令)和程序计数器)内存MM用于存储数据与指令External mass storage(外部大容原创 2020-06-15 21:10:04 · 2097 阅读 · 0 评论 -
CSAPP——函数过程调用
函数调用三阶段调用前:参数准备调用时:call指令调用函数调用时:开辟栈空间,执行指令函数返回:leav指令和pop指令(1)参数准备从右到左处理参数列表,右边的参数先处理,与esp的距离越远如果是指针或者引用类型的参数,将会保存参数的地址(2)call指令调用函数call 指令调用函数,保存返回地址:push %eip(3)开辟栈空间,执行指令一般都是如下三条指令,首先将ebp保存在栈顶,然后将ebp指向新的栈底,然后esp减去一个值以开辟栈空间pus.原创 2020-06-15 09:38:13 · 698 阅读 · 0 评论 -
信息表示练习
判断机器大小端T1: 2.58 编写过程 is_little_endian,当在小端格式机器上编译和运行时返回 1,在大端格式机器上编译运行时则返回 0。这个程序应该可以运行在任何机器上,无论机器的字长是多少。方法1:利用union类型:short和char 共享一个2字节的内存,char在第一个字节上,现在将short赋值为1,那么如果是小端法存储,将会是0x 01 00 char变量的值应该是1,如果是大端法那么内存中将会是0x00 01 ,char变量的值将会是0:方法2:利原创 2020-06-14 11:22:24 · 1358 阅读 · 0 评论 -
CSAPP复习——信息表示
信息表示编码方式分类整数浮点数原创 2020-06-13 23:23:17 · 331 阅读 · 3 评论 -
CSAPP shlab实验
实验目的熟悉过程控制和信号传递的概念,搭建一个简单的unix shell外壳程序要求完成7个主要函数,其原型都在教材第八章中void eval(char *cmdline);int builtin_cmd(char **argv);void do_bgfg(char **argv);void waitfg(pid_t pid);void sigchld_handler(int sig);void sigtstp_handler(int sig);void sigint_handle原创 2020-06-07 14:06:04 · 5292 阅读 · 0 评论 -
CSAPP第8&9章家庭作业(部分)
画出进程图:原则如下:(1) 遇到fork函数就分支,每个水平的箭头对应于从 左到右执行指令的进程,而每个垂直的箭头对应于 fork 函数的执行(2) 分支的时候专注于父进程执行完,再处理另一个分支(3) 父进程中, fork 返回子进程的 PID、在子进程中, fork 返回 0(4) 在新的进程中可以认为执行的是上一个fork以下的部分。对于执行过程,由于程序不会按照特定的顺序回收子进程,子进程回收的顺序是这台特定的计算机的属性。所以这个输出结果不是确定的,但是对于这道题,exit...原创 2020-06-06 23:47:33 · 1688 阅读 · 1 评论 -
在?一起翻车。。。
CSAPP第一次小测——汇编在?一起翻车。错了四道四道,老哥,您这是干啥啊?好好补一补,博客记一下,警戒+积累,本次大坑是:有符号整型是补码表示cmpl SRC,Dsc是Dcr - Srcjmp 指令种与PC相关的条件转移你竟意识全无T1考察add指令两个正整数相加,结果存放在%edx=0x2729 5700T2考察cmpl指令和有符号跳转指令jge注意有符号整型数据以二进制补码的形式存放,而jge指令为有符号大于等于Greater or Equal(Signed),因原创 2020-05-31 21:17:33 · 1186 阅读 · 3 评论 -
CSAPP bufLab 缓冲炸弹
实验题目 CS:APP BufLab实验目的:本实验将帮助您详细了解IA-32调用约定和堆栈组织。它涉及到对lab目录中的可执行文件bufbomb应用一系列缓冲区溢出攻击。注意:在本实验室中,您将获得使用操作系统和网络服务器中的安全漏洞的常用方法之一的第一手经验。我们的目的是帮助您了解程序的运行时操作,并理解这种形式的安全缺陷的性质,以便您在编写系统代码时可以避免它。实验环境:ubuntu12.04 (32位)环境一.实验内容及操作步骤Level0:(1)问题描述Level0任务是让BUFBO原创 2020-05-26 21:50:58 · 3355 阅读 · 0 评论 -
寄存器山分析——CSAPP discuss
解读所附 mountain 程序,并将该 mountain 程序在本组内不同(品牌/配置)PC 的 linux 系统上运行它。尝试绘制自己的存储器 山三维图(或两张二维图),并解读该存储器山,根据结果分析该系统上的高速缓存的大小。建议可在组内不同配置机器上运行,比较不 同机器上高速缓存的设置。一. 解读 mountain 程序:int main(){ int size; /* Working set size (in bytes) 工作集*/ int stride; .原创 2020-05-21 11:47:35 · 2636 阅读 · 1 评论 -
第七章家庭作业——符号解析,重定位绝对引用,重定位相对引用
分析过程如下:① buf由关键字extend引入,是外部变量,swap.o.symtab条目中会存放由其他模块定义并被模块 m 引用的全局符号,这个外部是指的main.o,查看CSAPP前面的main.c代码可以发现buf是已经被初始化的全局变量,因此保存在节.data中② bufp0是定义在全局的已初始化变量,因此会被swap.o.symtab条目存放;它在swap.o中定义,存放于.data节③ bufp1是带static属性的静态未初始化全局变量,因此会被swap.o.symtab条目存放;由.原创 2020-05-17 15:08:18 · 2199 阅读 · 3 评论 -
链接2静态库和动态库——CSAPP总结
博客简介本篇博客是CSAPP链接章节的库部分总结,目录如下:链接静态库链接动态库如何打包编程者经常使用的功能函数? 在静态库提出之前有2中方法:Option 1: 将所有函数写入一个源代码文件编程者需要将一个很大的目标文件链接到其程序空间和时间性能都低Option 2: 每一个函数形成一个单独的源文件编程者需将自己的程序显示地链接到相应的二进制文 件更有效,但对于编程者是额外负担以上两种库处理方式并不能很好处理库链接链接静态库将所有相关的目标模块打原创 2020-05-16 22:27:34 · 592 阅读 · 0 评论 -
链接1——CSAPP总结
define 链接 (linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这 个文件可被加载(或被拷贝)到存储器并执行。链接可以执行于编译时 (compile time), 也就 是在源代码被翻译成机器代码时;也可以执行于加载时 (load time) , 也就是在程序被加载器 (loader) 加载到存储器并执行时;甚至执行于运行时 (run time), 由应用程序来执行。在早期 的计算机系统中,链接是手动执行的。在现代系统中,链接是由叫做链接器 (linker) 的程序自 动原创 2020-05-16 17:38:32 · 834 阅读 · 0 评论 -
用GNU READELF工具分析ELF文件
readelf命令是Linux下的分析ELF文件的命令,在分析ELF文件时非常方便,在此记录:使用方法:linux> readelf -h test.olinux> readelf -l test.olinux> readelf -S swap.o参数选项 选项 描述 -a –all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. -h原创 2020-05-16 14:07:06 · 1023 阅读 · 0 评论 -
cacheLab partB
blog简介本博客是HNUcacheLab的B部分,在此记录以防丢失。1. 以M32N32矩阵为例,并通过csim ref详细选项(-v)在缓存跟踪 trace.f文件中观察结果。① 执行指令linux> make linux>./test-trans -M 32 -N 32生成trace.f0和trace.f1文件② 执行指令./csim-ref -v -s 5 -E 1 -b 5 -t trace.f0在缓存跟踪 trace.f文件中观察结果2.编写csim.c处理原创 2020-05-11 07:20:25 · 2120 阅读 · 1 评论 -
程序性能优化gprof&循环展开极限&常见优化方法举例
博客简介本博客是大二下学期CSAPP课程的第六次小班讨论课内容,本博客记录如何用gprof剖析程序性能,以及循环展开极限和常见的优化方法gprof简介GNU gprof 是一款linux平台上的程序分析软件(unix也有prof)。借助gprof可以获得C/C++程序运行期间的统计数据,例如每个函数耗费的时间,函数被调用的次数以及各个函数相互之间的调用关系。gprof可以帮助我们找到程序运行...原创 2020-05-07 21:26:39 · 2230 阅读 · 2 评论 -
cacheLab PartA
实验要求Writing a Cache Simulatorcache高速缓存用于实现CPU和MM之间的数据交互,起到一个缓存的作用,高速缓存技术大大增强了CPU的数据利用率。本次实验的内容是编写代码来模拟高速缓存的运作并且统计某一组指令执行后的hit ,miss,eviction个数。在这之前,我们先来了解cache的工作原理。cache高速缓存工作原理...原创 2020-05-06 00:07:19 · 1235 阅读 · 0 评论 -
APP Bomb Lab
实验题目:CS:APP Bomb Lab实验目的:binary bomb is a Linux executable C program that consists of sixphases. Each phase expects the student to enter a particular stringon stdin. If the student enters the exp...原创 2020-05-05 14:47:02 · 1137 阅读 · 1 评论 -
储存器山和矩阵乘法
博客简介关于cache的性能,影响因素由很多。固有的cache大小即cache组规模会影响cache的性能,这由计算机内部硬件属性决定。而对于编码者来说,可以考虑编写对Cache友好的代码,提高空间局部性进一步来优化cache性能。本博客也将对这两方面展开讨论,用两个具体的例子来测算cache性能的影响因素;其中储存器山的例子展示固有的cache大小,空间局部性对吞吐量的影响。矩阵乘法的例子则考...原创 2020-05-03 13:25:37 · 1991 阅读 · 1 评论 -
App Data Lab——计算机系统实验lab2
实验题目APP Data Lab实验目的:Your goal is to modify your copy of bits.c so that it passes all the tests in btest without violating any of the coding guidelines.我的目标是修改bits.c文档,完成所有函数的编写,利用dlc和btest两个工具通过所...原创 2020-04-16 06:42:45 · 2690 阅读 · 0 评论 -
汇编中的乘除法运算问题(特殊算数操作指令)——计算机系统小班讨论
博客简介本篇博客主要通过几个实例来介绍除法运算的过程:(借鉴某位同学大佬的PPT,万分感谢!)整数的除法浮点数的除法整数的除法运算代码段一: 代码段二:int a = 0x80000000; int a = 0x80000000;int b = a / -1; int b = -1;printf("%d\n", b); int c = a / b; ...原创 2020-04-14 21:16:06 · 2895 阅读 · 0 评论 -
perflab实验smooth函数前缀和优化
实验内容本次实验要求修改kernel.c中的smooth函数,优化其加速比。优化策略优化策略:使用前缀和避免不必要的重复计算前缀和算法本次实验慎用,不一定符合实验的要求,在实验要求范围内的改进才被认作是好的改进,虽然你的算法达到了50.3的加速比!这里将虽然没有改动avg但是其实是变相的改变了avg的均值算法。优化思路刚开始拿到smooth优化时,想了很多方法,包括避免函数调用,分...原创 2020-05-18 16:39:33 · 1399 阅读 · 0 评论 -
switch语句
switch (开关)switch语句可以根据一一个整数索引值进行多重分支(multi way branching)。处理具有多种可能结果的测试时,这种语句特别有用。它们不仅提高了C代码的可读性,而且通过使用跳转表(jump table)这种数据结构使得实现更加高效。跳转表是-一个数组,表项i是-一个代码段的地址,这个代码段实现当开关索引值等于i时程序应该采取的动作。程序代码用开关索引值来执行一...原创 2020-04-12 23:47:43 · 631 阅读 · 0 评论 -
浮点数显示为字符串——小班讨论3
博客简介本篇博客是计算机系统小班讨论内容之一,用于记录学习过程分析代码定义一个整型数组,输出 HNU!分析代码#include <stdio.h> int main() { float a[3]={ 1143139122437582505939828736.0, 76482007234779498639230238720.0, 9.222452464...原创 2020-03-28 09:53:17 · 818 阅读 · 0 评论 -
int ,float ,double 的相互转换问题——小班讨论3
博客简介本篇博客是计算机系统课程的讨论内容,用作学习记录,主要介绍的是:int ,float ,double 的相互转换问题 ,分析两段代码并对int,float,double的转换规则进行总结。分析代码代码1:#include <stdio.h>#define MaxValue 0x7fffffffint main(){ int i=MaxValue; ...原创 2020-03-28 08:46:40 · 1128 阅读 · 0 评论 -
浮点数加法——小班讨论3
博客简介本博客是计算机系统小班讨论内容之一,记录小班讨论的浮点数加法运算规则浮点数加法规则实例汇编调试浮点数加法规则对阶,小阶向大阶对齐:两个浮点数进行加减运算时,首先要使两个数的阶码相 同,即小数点的位置对齐。若两个数的阶码相同,表示小 数点的位置是对齐的,就可以对尾数进行加减运算。反之 ,若两个数的阶码不相同,表示小数点的位置没有对齐, 此时必须使两个数的阶码相同,这个过程...原创 2020-03-27 23:10:47 · 938 阅读 · 0 评论 -
unsigned类型的问题——小班讨论3
博客简介本篇博客介绍unsigned类型的使用时常见的两个错误,用于记录小班讨论内容unsigned类型常见问题分析分析如下两段代码运行过程和结果:(1)代码1:#include "stdio.h"int main(){ char c=-128; char d=-c; printf("c=%d,d=%d\n",(int)c,(int)d); return 0;}启用...原创 2020-03-27 21:12:42 · 284 阅读 · 0 评论 -
整型和浮点类型的比较——小班讨论3
博客简介本篇博客是计算机系统小班讨论3内容之一,用于记录学习过程int型数据和单精度浮点的表示比较unsigned类型的坑1. int型数据和单精度浮点的表示比较分析代码1://1001.c#include "stdio.h"int main(){ int i; printf("整数占用%d个字节\n",sizeof(int)); for(i=5;i<50000...原创 2020-03-27 19:07:23 · 3014 阅读 · 0 评论 -
浮点数表示——2(小班讨论3)
问题描述:选题 4:在 C 中,如下代码:float e = 1.1110999f;printf(“1.1110999f 打印真实为:%f” , e);会输出:1.1110999f 打印真实为:1.1111深入分析其原因,并给出判断一个浮点数是否能精确表示的思路。一.分析原因:1首先我们对数据进行规格化:(1) 对于数据e = 1.1110999f,我们先将其转化为数学形式:1.1...原创 2020-03-24 20:55:35 · 1026 阅读 · 0 评论 -
gdb调试c程序
博客简介本篇博客记录如何用gdb调试c程序,以免和之前的命令混淆,这里做一个统一的说明。编译并运行.s文件.c文件的编译过程gdb调试c程序编译并运行.s文件ctr+alt+T打开Terminalcd +目录进入相应目录编译.s文件:as -g fileName.s -o fileName2.o如:as -g 1005.s -o 1005.o建立连接:ld f...原创 2020-03-24 19:23:05 · 553 阅读 · 0 评论 -
浮点数的表示——计算机系统
博客简介本篇博客是计算机系统课程的学习记录,讲解浮点数在计算机底层中的存储方式:二进制小数IEEEE浮点数标准浮点数表示性质舍入与运算二进制小数二进制小数如何表示?二进制数的表示方法很简单,以2^i的形式表示:小数点右移一位*2,小数点左移一位/2只能精确表示x/2^k的数,其他数只能近似表示手动转换方法:整数部分除2取余,小数部分乘2取整例如5 3/4 101...原创 2020-03-22 23:27:54 · 1298 阅读 · 1 评论 -
实验一(较高要求):Debug使用进阶及80X86汇编初步
博客简介本篇博客是计算机系统中的实验1内容,Debug汇编80X86初步,用于学习记录。实验内容任务一课堂上曾书写一个求12+22+……+102的示例程序(见后面附录),请改写该程序,实现求一些毫无规律的任意数的平方和。将这些数定义在内存中,假设这些数据都是字节型的非零无符号数(即1~255),请选用合适的Debug命令定义它们,约定数据值0作为结束标记。1、 将结果放在数据寄存器中,请...原创 2020-03-22 11:47:12 · 502 阅读 · 0 评论 -
常用汇编指令
博客简介本篇博客介绍汇编语言中常用的语句以及逻辑实现,主要包括:栈操作pop 和push算术逻辑操作跳转指令标志位指令有条件传送指令循环指令栈操作pop push在每个程序所分配的内存中,划分出一段连续的 区域,作为栈空间:栈顶指针:保存在%esp寄存器中压栈操作:push弹栈操作:pop示意图:数值在内存中反向存储:代码示例:.section .dat...原创 2020-03-10 08:56:37 · 2986 阅读 · 0 评论 -
.c文件编译过程
博客简介Linux中的.c文件编译过程如下:预处理(Pre-Processing)–>编译(Compiling)–>汇编(Assembling)–>链接(Linking)本篇博客将对此过程进行详细的介绍c 程序的编译过程在开始编译之前,我们先编写一段经典的c代码:#include <stdio.h>int main(){ printf("hell...原创 2020-03-05 19:24:35 · 1247 阅读 · 0 评论 -
汇编语言入门
博客简介本博客是大二计算机原理与组成课程总结,意在入门汇编语言。主要通过一些小例子来学习汇编,持续完善中…汇编语言介绍第一条汇编代码编译并运行第一条代码通用寄存器传送指令mov指令集汇总汇编语言简介汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址...原创 2020-03-03 23:40:13 · 1046 阅读 · 0 评论 -
内存中的区域划分
博客简介本篇博客主要介绍在C程序中的内存区域的划分,内存被分为一些不同的区域,各有不同的功能和特性,下面是区域的分类:C语言中的区域划分:栈区stack堆区heap静态区static常量区C++中的区域划分:栈区stack堆区heap全局区/静态区static常量区代码区内存中的四区:栈区stack堆区heap全局区代码区各区域的功能特点栈区st...原创 2020-02-27 13:03:51 · 1419 阅读 · 0 评论