地址

计算机操作系统 - 内存管理

爷,独闯天下 提交于 2019-12-12 01:09:31
• Read 摘自 github CS-Notes - 计算机操作系统 一、虚拟内存 将物理内存抽象为地址空间,每个进程都有各自的地址空间,地址空间被分割成多个块, 每一块称为一页 。这些页被 映射到物理内存 ,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。目的是让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 1、分页系统地址映射 内存管理单元负责地址空间和物理内存的转换,其中页表存储着 页(程序地址空间) 和 页框(物理内存空间) 的映射表。一个虚拟地址分为 页面号 (16位地址是前4位)和 存储偏移量 。页面号的十进制数对应页表的索引,一个页表项最后一位表示是否存在于内存,前几位即为页框的前几位。 2、页面置换算法 在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而 将该页调入内存 中。此时如果内存已无空闲空间,系统必须从内存中 调出一个页面到磁盘对换区 中来腾出空间。 页面置换算法的主要目的就是 使页面置换频率最低 。 大专栏 计算机操作系统 - 内存管理 > 最佳 (OPT):所选择的被换出的页面将是最长时间内不再被访问(理论上不知道将来使用页面的情况) 最近最久未使用( LRU):通过维护链表保证表尾的页面是最近最久未访问的,代价很高 最近未使用 :每个页面有 R 和 M 两个状态位 先进先出

第七周作业—N42-虚怀若谷

﹥>﹥吖頭↗ 提交于 2019-12-11 20:29:23
一、简述OSI七层模型和TCP/IP五层模型 1. OSI七层模型  物理层:二进制传输,为启动、维护以及关闭物理链路定义了电气规范、机械规范、过程规范和功能规范;实际的最终信号的传输是通过物理层实现的。通过物理介质传输0-1 比特流。常用的设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆,这些都是物理层的传输介质。 传输的单位是比特。  数据链路层:将比特组合成字节,再将字节组合成帧,使用数据链路层地址(以太网使用的是 MAC 地址)来访问介质,并进行差错检测。在物理层提供的服务基础之上,负责在通信的实体之间创建数据链路。传输以帧为单位的数据包。  网络层:通过 IP 寻址来创建两个网络节点之间的连接,为源主机的传输层送来的分组,选择合适的路由和交换节点,正确无误的按照 IP 地址传送给目的主机的传输层。就是通常说的 IP 层,使用 IP协议和路由器的路由选择信息。数据传输单位是分组。IP 地址、路由器、IP 协议。  传输层:创建了主机之间的端到端的连接;传输层的作用,是为上层协议提供端到端的可靠的透明的数据传输服务,包括差错控制和流量控制等问题。我们通常说的TCP、UDP就是在这一层。端口号即是这里的“ 端 ”。TCP 协议、UDP 协议。  会话层:负责创建、管理和终止表示层实体之间的通信会话。  表示层:提供各种用于应用层数据的编码和转换功能

【C++】对指针形参及指针数组分配内存空间

寵の児 提交于 2019-12-11 18:37:20
在使用指针作为函数形参的时候,和数组首地址作为函数形参的用法一致。但指针和数组有一个重要区别是指针指向的地址可能为空,而数组的首地址一定会指向一段地址空间的。因此在使用指针作为函数形参,并在函数内申请内存空间时,传入的应该为指针的地址。而在释放该地址空间时,直接传该指针即可。 另外还要区分指针数组和数组指针的区别。运算优先级为 () > [] > * #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; //指针传递的是一个变量,或者一个值的地址,它本身还是采用值传递的方式。 //***不能使指针在函数内指向另一块地址,但可以改变它指向空间的值。*** //一维指针传参申请内存空间及赋值 //传入的应该是指针的地址 void fun(int** p) { *p = new int[5]; for(int i=0;i<5;i++){ //*p应该为一个单位进行赋值,表示的是取p的值(*p);()不可缺 (*p)[i] = i; } } //数组传递,可以只传递数组首地址 void funa(int *p) { for(int i=0;i<5;i++){ p[i] = i; } } //二维指针传参申请内存空间及赋值 //传入的应该是指针的地址 void fun2(int*** p)

第 17 章 计算机体系结构基础

旧巷老猫 提交于 2019-12-11 13:45:57
一、参考网址   1、 linux C编程一站式学习 二、笔记   1、一级cache与二级cache的区别     一级缓存是用VA寻址的,二级缓存是用PA寻址的,这是它们的区别   2、VA(虚拟地址)和PA(物理地址)的区别     CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将VA映射成PA(Physical Address)   3、MMU     1)MMU将VA映射到PA是以页(Page)为单位的,32位处理器的页尺寸通常是4KB     2)物理内存中的页称为物理页面或者页帧(Page Frame)     3)虚拟内存的哪个页面映射到物理内存的哪个页帧是通过页表(Page Table)来描述的,页表保存在物理内存中,MMU会查找页表来确定一个VA应该映射到什么PA     4) MMU除了做地址转换之外,还提供内存保护机制      5|)x86平台的虚拟地址空间是0x0000 0000~0xffff ffff,大致上前3GB(0x0000 0000~0xbfff ffff)是用户空间,后1GB(0xc000 0000~0xffff ffff)是内核空间 来源: https://www.cnblogs.com

以太网帧

佐手、 提交于 2019-12-11 12:36:08
以太网帧 @1 MAC地址 1… 每一块网卡都有属于自己的身份证号码MAC 2…长度46bit(6个字节) 3…厂商需要去IEEE协会注册厂商代码,MAC前3个字节是厂商代码(OUI),制造商制造网卡的过程中,会往每一块网卡中的ROM中烧入一个48bit的BIA地址。 4…烧入网卡的MAC地址是不可更改的 @2 MAC地址种类 1…单播MAC地址是指第一个字节最低位是0的MAC地址。 2…组播MAC地址是指第一个字节最低位是1的MAC地址。 3…广播MAC地址是指每个比特都是1的MAC地址。 @3 以太帧的格式:以太网技术所使用的帧,称为以太网帧 1…IEEE802.3格式 2…Ethernet II格式 由DEX.Intel.Xerox三家公司联合定义。现用最广。 格式:目的MAC地址 源MAC地址 类型(0x0800 表示载荷数据是一个ipv4 packet)(0x86dd 表示载荷数据是一个ipv6 packet)(0x0806 表示是一个ARP packrt) (0x8848 表示是一个MPLS报文) 载荷数据 46~1500字节 CRC字段 @4 以太网帧的种类 1…单播以太网帧 目的MAC地址为一个单播MAC地址的帧 2…组播以太网帧 目的MAC地址为一个组播MAC地址的帧 3…广播以太网帧 目的MAC地址为一个广播MAC地址帧 来源: https://www

攻防世界PWN之house_of_grey题解

狂风中的少年 提交于 2019-12-11 08:44:13
house_of_grey 首先,检查一下程序的保护机制,发现保护全开 然后,我们用IDA分析一下 发现是一个读取文件并显示的程序,除了flag文件,其他文件都可以读取 程序有个缓冲区溢出漏洞 可以 溢出,修改 v8 指针,然后我们就可以利用功能 4 ,实现任意地址写 由于可以读取除了flag之外的文件,那么我们可以 读取 /proc/self/maps 文件 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。 proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。读取 /proc/self/maps 可以得到当前进程的内存映射关系,通过读该文件的内容可以得到内存代码段基址。 /proc/self/mem 是进程的内存内容 , 通过修改该文件相当于直接修改当前进程的内存 。该文件 不能直接读取,需要结合 maps 的映射信息来确定读的偏移值。即无法读取未被映射的区域,只有读取的偏移值是被映射的区域才能正确读取内存内容。 同样的,我们也可以通过写入 mem 文件来直接写入内存,例如直接修改代码段,放入我们的 shellcode ,从而在程序流程执行到这一步时执行 shellcode 来拿 shell 。 那么,我们先来测试一下 我们得到了各个段的地址,由此,我们可以绕过PIE,以及利用/proc/self

vue中路由重定向redirect

时间秒杀一切 提交于 2019-12-11 05:45:15
1.传参 重定向时传参,根据重定向到的路径进行传参 注意:重定向改变了路径,此时路径并不是goParams/1993/yq love zn而是params/1993/yq love znf 2.不传参 不传参直接重定向路径地址 注意:redirect重定向改变了url地址,如果重定向的地址需要接收参数然而没有传参不会改变地址,页面不会报错但是也不会显示内容 来源: CSDN 作者: wangningjing87 链接: https://blog.csdn.net/wangningjing87/article/details/103470233

基础常用arm汇编指令

一个人想着一个人 提交于 2019-12-11 03:55:36
内存访问指令:ldr,str,ldm,stm ldr( Load from memory into register): ldr{条件} 目的寄存器 <存储器地址> 作用: 指令从内存中读出数据到寄存器中 比如: ldr r1, [r2,#4] //将地址r2+4的内存单元的数据读取到r1中 ldr r1,[r2] //将地址r2的内存单元的数据读取到r1中。 R1<——[R2] 注意:ldr中的第二个参数为=时,表示伪指令,或者表示内存访问指令 比如 ldr r1,=4096 ; str: Store from a register into memory 把指令寄存器的值储存到内存中。 比如: str r1,[r2,#4] //将r1的数据保存到地址为r2+4的内存单元中 str r1,[r2] //将r1的数据保存到地址为r2的内存单元中 R1——>[R2] ldm: Load from memory into many register 格式如下: ldm{cond}<addressing_mode> {!} {^} <addressing_mode>表示地址变化模式,有以下4中方式 1、ia(increment after):事后递增 2、ib(increment before):事先递增 3、da(decrement after):事后递减 4、db(decrement

python中的变量对象小结2

三世轮回 提交于 2019-12-10 17:13:46
# 1.变量名和数据内容是分开存储的。 # 2.数据保存在内存中的一个位置(地址)。 # 3.变量中保存着数据在内存中的地址。 # 引用就是变量中记录数据的地址。 #不可变变量,重新赋值时会重新开辟一个地址空间 a = '小红' print(id(a)) a = '小明' print(id(a)) #可变变量,重新赋值时,不会重新开辟地址空间,而是直接改变内存中的值 data = {} data['a'] = '小红' print(id(data)) data['a'] = '小黑' print(id(data)) 运行结果: D:\anacon\python.exe E:/柠檬班/class_007_复习/class_002.py 2785688930504 2785689585424 2785688735816 2785688735816 来源: https://www.cnblogs.com/wuzm/p/12017585.html

使用metamask钱包

∥☆過路亽.° 提交于 2019-12-10 16:46:43
一、安装火狐浏览器metamask插件 打开火狐浏览器的附件组件,搜索metamask 点击第一个 点击“添加到Firefox” 添加成功后,浏览器右上角有一个狐狸标志 点击这个标志,打开插件 二、创建一个钱包 输入密码 记录助记词 下一步再确认助记词,然后点击完成,钱包创建成功,进入主界面 我们选择ropsten测试网络 三、获取测试币 点击“存入” 从“测试水龙头”获取测试币 浏览器打开测试水龙头地址,第一次点击"request 1 ether from faucet",从水龙头获取测试币,会弹出一个对话框,请求关联自己的钱包账户地址,点击“连接” 这时候回到获取测试币页面下面的User项就会出现我们的钱包地址 这是就可以点击"request 1 ether from faucet“每次获取1个ETH了 如果获取成功,则页面下方,会出现一个transaction列表,里面列出了我们从水龙头获取测试币的交易记录的HASH 我们点击其中一个交易的HASH,则浏览器打开ropsten.etherscan.io网站,列出这个交易的详细信息 可以看到,交易结果已经成功(success),并显示是哪个区块打包的(6941148),交易时间戳,from从哪个地址发出的,本次交易发出的地址就是水龙头地址,to就是我的钱包地址 value:交易金额 1ETH Transaction Fee