计算机系统
文章平均质量分 90
Adenialzz
Keep Learning.
展开
-
Linux内存背后的那些神秘往事
Linux内存背后的那些神秘往事作者:大白斯基(公众号:后端研究所)转自:https://mp.weixin.qq.com/s/l_YdpyHht5Ayvrc7LFZNIA前言大家好,我的朋友们!CPU、IO、磁盘、内存可以说是影响计算机性能关键因素,今天就聊探究下内存的那些事儿。内存为进程的运行提供物理空间,同时作为快速CPU和慢速磁盘之间的适配器,可以说是个非常重要的角色。通过本文你将了解到以下内容:本文均围绕Linux操作系统展开,话不多说,我们开始吧!虚拟内存机制当要学转载 2022-04-16 16:44:19 · 210 阅读 · 0 评论 -
常见浮点数格式梳理
常见浮点数格式梳理IEEE 754 标准浮点数转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.htmlIEEE二进制浮点数算术标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。IEEE 754规定了四种表示浮点原创 2022-04-05 21:59:49 · 4583 阅读 · 0 评论 -
共享内存简介及docker容器的shm设置与修改
共享内存简介及docker容器的shm设置与修改共享内存简介共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。实际上原创 2022-04-02 22:51:30 · 33660 阅读 · 7 评论 -
关于x86、x86_64/x64、amd64和arm64/aarch64
关于x86、x86_64/x64、amd64和arm64/aarch64转自:https://www.jianshu.com/p/2753c45af9bf为什么叫x86和x86_64和AMD64?为什么大家叫x86为32位系统?为什么软件版本会注明 for amd64版本,不是intel64呢?x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,intel官方文档里面称为“IA-3转载 2021-11-05 18:28:45 · 1503 阅读 · 0 评论 -
Copy-On-Write COW机制
Copy-On-Write COW机制转自:https://zhuanlan.zhihu.com/p/48147304作者:Java3y前言只有光头才能变强在读《Redis设计与实现》关于哈希表扩容的时候,发现这么一段话:执行BGSAVE命令或者BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率,所以在子进程存在期间,服务器会提高负载因子的阈值,从而避免在子进程存在期间进行哈转载 2021-11-03 22:47:12 · 362 阅读 · 0 评论 -
虚拟内存精粹
虚拟内存精粹标题:虚拟内存精粹作者:潘建锋原文:HTTPS://strikefreedom.top/memory-management–virtual-memory导言虚拟内存是当今计算机系统中最重要的抽象概念之一,它的提出是为了更加有效地管理内存并且降低内存出错的概率。虚拟内存影响着计算机的方方面面,包括硬件设计、文件系统、共享对象和进程/线程调度等等,每一个致力于编写高效且出错概率低的程序的程序员都应该深入学习虚拟内存。本文全面而深入地剖析了虚拟内存的工作原理,帮助读者快速而深刻地理解这转载 2021-10-31 15:25:38 · 153 阅读 · 0 评论 -
一分钟系列:什么是虚拟内存?
一分钟系列:什么是虚拟内存?转自:https://mp.weixin.qq.com/s/opMgZrXV-lfgOWrNUMKweg注:一分钟系列的篇幅都不长,适合吃饭蹲坑、地铁公交上食用~内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于内存来说,除去操作系统的代码和数据占用的一些空间外,其余空间全部分配给正在运行的那个程序,画个图就是这样:小贴士:我们把运行着的程序称转载 2021-10-31 13:22:58 · 154 阅读 · 0 评论 -
Linux下的LD_PRELOAD环境变量与库打桩
Linux下的LD_PRELOAD环境变量与库打桩LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库,一方面,我们可以以此功能来使用自己的或是更好的函数(比如,你可以使用Google开发的tcmalloc来提升效率),而另一方面,我们也可以向别人的程序注入程序,从而达到特定的目的。我们下面以一个 foepn() 函数的例子来展示一下如何实现运行时库打桩。正常库函数调用首先,我们建立一个测试目录原创 2021-10-29 10:57:24 · 2226 阅读 · 0 评论 -
Linux内核初探
Linux内核初探内核的组成部分kernel:内核核心文件,一般为bzp_w_picpath,经过压缩处理的镜像文件;通常内核核心文件保存在/boot/目录下,名称为vmlinuz-version-releasekernel object(ko):内核对象,内核额外功能模块,一般该类文件放置于/lib/modules/[version-release]内核管理的相关命令uname功能:打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。常用选项-n:显原创 2021-10-13 17:31:42 · 445 阅读 · 0 评论 -
Linux下构建自己的C++共享库并配合pkg-config生成链接选项
Linux下构建自己的C++共享库并配合pkg-config生成链接选项本文将以C++链表的新建、打印操作为例构建自己的共享库,并在实际调试代码时尝试使用。我们在做数据结构题时经常需要将链表打印出来看一下结果,但是并没有一种库函数可以让我们直接调用来打印自己的基于ListNode的链表(LeetCode的题目通常是这样的链表)。因此本文将以此为例,介绍怎样构建自己的动态链接库,并通过pkg-config生成对应的链接选项。生成共享库并添加到环境变量我们的链表库的源代码LinkedList.cpp是这样原创 2021-10-09 20:36:37 · 382 阅读 · 0 评论 -
Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)
Linux下的ELF文件、链接、加载与库链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行。链接可以执行与编译时,也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是被加载器加载到内存执行时;甚至执行于运行时,也就是由应用程序来执行。 — CSAPP本文主要参考[原创] Linux环境下:程序的链接, 装载和库,[完结] 2020 南京大学原创 2021-10-06 23:14:49 · 10674 阅读 · 3 评论 -
Linux中的二进制可执行文件和脚本可执行文件及Shebang
Linux中的二进制可执行文件和脚本可执行文件及Shebang二进制可执行文件我们知道,一个C程序经过预处理、编译、汇编、链接就会得到一个二进制可执行文件,这种文件在Linux中叫做ELF文件。比如我们有一个C源代码hello.c:#include <stdio.h>int main(int argc, char** argv){ printf("Hello !\n");}我们编译得到 hello 文件,并用file命令可以查看到生成的二进制可执行文件的信息:gcc he原创 2021-10-03 21:14:48 · 10777 阅读 · 0 评论 -
Linux中的硬链接和软链接
节选自南大蒋炎岩老师操作系统网络课程笔记:(2021) 24 [持久化] 文件系统API硬(hard)链接UNIX文件指针在UNIX中,文件和目录完全不是同一个概念,虽然我们平时看着它们仿佛并列地躺在某个文件夹下。但实际上,目录是树状结构组织的,而文件,却是每个目录指向某个文件的指针。并且,每个文件都有一个编号,可能会有多个目录下的多个指针都指向同一个编号的文件。它们虽然存在于不同的目录下,甚至名称也不同,但是同一个编号的文件是完全相同的,修改也是同步的。如下图所示:我们可以做这样的测试:创建测原创 2021-10-01 23:33:14 · 1149 阅读 · 0 评论 -
编程环境中Runtime(运行时)的三个含义
编程环境中Runtime(运行时)的三个含义转自:https://www.zhihu.com/question/20607178 知乎答主@doodlewind三个含义实际上编程语境中的 runtime 至少有三个含义,分别是:指「程序运行的时候」,即程序生命周期中的一个阶段。例句:「Rust 比 C 更容易将错误发现在编译时而非运行时。」指「运行时库」,即 glibc 这类原生语言的标准库。例句:「C 程序的 malloc 函数实现需要由运行时提供。」指「运行时系统」,即某门语言的宿主环境。转载 2021-09-28 18:56:17 · 4655 阅读 · 1 评论 -
linux /proc 详解
linux /proc 详解本文整理了一下 linux /proc下的几个常用的目录和文件,可供查阅,之后在学习工作中有别的用到的话会再补充。/proc 简介Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。另外,/proc是存储在内存(RAM)中,而非原创 2021-09-28 14:42:36 · 1701 阅读 · 0 评论 -
互斥锁、条件变量、信号量浅析
互斥锁、条件变量、信号量辨析互斥锁与条件变量条件变量是为了保证同步 条件变量用在多线程多任务同步的,一个线程完成了某一个动作就通过条件变量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。信号量可以看作是有计数的条件变量。互斥锁是为了保证互斥 互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,再解锁。互斥锁可以看作是二值信号量。有原创 2021-09-21 22:43:51 · 665 阅读 · 0 评论 -
操作系统引导详细过程
操作系统引导详细过程转自:https://blog.csdn.net/lijie45655/article/details/89366372 就直观而言,我们所见到计算机启动的过程是:按下电脑开机键,系统在黑色的屏幕下打印出一些英文语句、然后进入进度条状态,最后到登陆界面,这样操作系统的引导过程就算完成了。我们不知道的是计算机本身经历一系列复杂的引导过程,才最终出现在我们面前。假如系统引导不成功,挂了,哇,好尴尬转载 2021-09-18 21:45:14 · 12538 阅读 · 3 评论 -
ELF文件详解—初步认识
ELF文件详解—初步认识转自:https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在讲解ELF文件格式之前,我们来回顾一下,一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程,我们知道在CPU上执行的是低级别的机器语言,从高级语言到低级别的机器语言肯定是要经过翻译过程,这个过程大体的过程如下图所示: &转载 2021-09-16 14:40:31 · 2095 阅读 · 0 评论 -
条件控制与条件传送详解
条件控制与条件传送CSAPP3e中文译本 3.6.5 用条件控制来实现条件分支 3.6.6 用条件传送来实现条件分支CSAPP3e第三章前面主要是介绍了机器级代码的二进制形式和汇编形式、反汇编、x86汇编的基础指令、条件码及其访问方式等。在介绍到汇编语言的条件分支时分了两小节(3.6.5,3.6.6)分别介绍实现条件分支的两种形式:用控制的条件转移实现(结合有条件和无条件跳转)用数据的条件转移实现并对这两种方式的适用场景,哪种在哪些场景下效率更高进行了说明,以及一些可能会造成的错误原创 2021-09-05 15:19:20 · 2622 阅读 · 4 评论