自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 time命令

time命令:计算测试程序的执行时间类unix系统中都自带了time命令,time命令可以计算一个程序的执行耗时。real表示程序执行的墙上时间,这段时间是程序开始执行到执行结束所花费的时间,既包括进程的执行时间,也包括等待IO完成的阻塞时间,还包括在抢占下,其他进程所占用的时间片。因为如果分配给这个进程的时间片到期了,还没有执行完,进程就会被调度下CPU,等待下次执行,然后其他进程会占用CPU,所以程序的执行时间里可能会包含其他进程的时间片。所以real不能准确地表示程序的执行时间。user表示真

2021-04-21 17:05:41 707

原创 两次调用scanf函数的问题

文章目录两次调用scanf函数可能存在的问题1.问题描述2.程序演示3.原理分析4.解决方式两次调用scanf函数可能存在的问题1.问题描述scanf()函数可以从stdin中读取数据并写入指定的内存地址处。它的工作原理大致如下:程序运行至scanf()处时,scanf()检查stdin是否有数据。如果stdin中有数据则按照格式串的格式读取数据并写入给定的内存地址处。如果stdin中没有数据,则阻塞等待用户输入。将用户的第一个非空白符输入(即不算空格和回车)与格式串中的第一个格式做匹配,只要

2021-04-04 22:27:03 2756 4

原创 Ubuntu 18.04修改hostname

1.安装cloud-init包sudo apt-get install cloud-init2.修改/etc/cloud/cloud.cfgsudo vim /etc/cloud/cloud.cfg#找到preserve_hostname: false修改为preserve_hostname: true3.执行命令 hostnamectl set-hostname 永久设置主机名hostnamectl set-hostname name...

2021-03-20 15:09:09 461

原创 Ubuntu 18.04构建BPF C编程环境

Ubuntu 18.04构建BPF C编程环境1.下载内核源码下载的内核版本与Ubuntu 18.04的内核版本一致。首先查看当前内核版本:uname -r。root@ubuntu:~# uname -r5.4.0-65-generic然后在内核源码镜像站点下载对应版本的内核源码包,解压在/usr/src目录下。root@ubuntu:/usr/src# lslinux-5.42.安装依赖sudo apt install libncurses5-dev flex bison li

2021-02-24 22:18:14 1090

原创 资料收藏专用

X86 | 汇编 | ABIx86amd64 psABI在哪里x86-64 System V ABI记录在哪里

2021-01-30 17:55:10 3875 1

转载 UNIX哲学与黑客

UNIX哲学Unix哲学论黑客论黑客 - 理查德·斯托曼的个人网站如何成为一名黑客如何成为一名黑客如何成为一名黑客

2020-12-19 15:27:30 181 1

原创 字符串和字符数组

字符串和字符数组C的字符串是通过字符数组来实现的。通过打印字符数组的每个元素来观察字符数组的元素组成和布局:#include <stdio.h>#include <string.h>int main(void){ char string[] = "hello";/* 字符串(字符数组)的长度是5,字符数组的大小是6。虽然空字符不计入字符串长度,但是空字符占一个字节 */ char message[] = {'h', 'e', 'l', 'l', 'o', '\0'};

2020-10-30 23:56:39 321

原创 理解指针运算符&和取值运算符*的原理

通过数组理解取地址运算符&的原理首先,我们看一段简单的代码:#include <stdio.h>int main(void){ /* * 当我们定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素类型大小x元素个数)的一块内存 * 并把这块内存命名为a。 */ int a[5];/* a作为右值时,代表数组首元素的地址,而非数组的首地址 */ //int *p; //p = &a; //printf("address of a[0

2020-10-15 15:31:51 1212 2

原创 通过汇编程序理解汇编和链接过程

汇编代码简析通过编写汇编程序,然后分析它的汇编和链接过程,对理解汇编程序中的各种汇编器指令和各种标签很有帮助。首先介绍以下汇编器指令和标签这两个概念,观察下面一段求最大值的汇编程序代码maxmum.s:#目的:寻找一组数中的最大值#寄存器有以下用途:# %edi - 保存正在检测的数据的索引# %ebx - 当前已经找到的最大数据项# %eax - 当前数据项#使用以下内存位置:# data_items - 包含数据项# 0表示数据结束.section .dat

2020-09-17 18:20:17 3423 2

原创 区分处理器的字,字长和汇编中的字,双字,四字

字和字长64位系统和32位系统中64和32的含义:64和32指的是CPU中的寄存器(通用)的字长,字长就是一个字的位数。这里说的字的含义是:处理器进行数据处理时,一次存取,加工,和传送的数据长度。系统中的一个字的大小与CPU寄存器的大小有关,因此,16位,32位系统与64位系统中的字不一样:16位系统:一个字 = 2Byte32位系统:一个字 = 4Byte64位系统:一个字 = 8Byte汇编中的字,双字和四字汇编中的字,双字,四字其实指的是汇编指令的后缀,与处理器概念中的字和字长是不

2020-09-16 19:25:38 1773

转载 开源社区给黑客带来了什么?

开源社开源社区给黑客带来了什么?

2020-09-08 08:49:41 122

原创 操作系统中的算法文章收录

文章盘点操作系统中用到的那些魔鬼算法

2020-07-26 17:16:28 193

原创 编译原理文章收录

文章为什么编译原理被称为龙书?

2020-07-26 17:12:38 162

原创 eBPF/BCC编程

eBPF/BCC编程一.系统跟踪内容梳理以下的思维导图是根据:linux tracing和profiling概论这篇文章的部分内容,加上自己这周对eBPF/bcc编程的学习总结整理出来的。大体的框架思路,还会不断完善。二.eBPF/bcc编程我在github上建了一个ebpfcode的仓库,记录了这周学习ebpf/bcc编程看过的比较好的资料和写过的代码,其中有些代码写了比较详细的注释,解释eBPF/bcc程序的结构,和一些接口函数的介绍。地址:ebpfcode仓库。代码是边看边敲,敲的多了会发

2020-07-14 00:05:35 1548 1

原创 本地仓库提交到各自的远程仓库

本地仓库提交到各自的远程仓库在github上创建一个新仓库在本地git clone一下git remote add origin 新仓库名(如果远程origin已存在,使用git remote rm origin,然后重新关联即可)为推送当前分支并建立与远程上游的跟踪,使用 git push --set-upstream origin master正常git push...

2020-07-11 23:35:21 179

转载 errno,perror(),strerror()

errno,perror(),strerror()C语言编程中错误打印需要知道的知识:errno:表示错误代号perror():显示传给它的字符串 ,头文件<stdio.h>strerror():返回一个指针,指向错误码代表的以文本显示的string。头文件<string.h>errno.herrno.h是标准C库的头文件,定义了通过错误码来回报错误信息的宏。errnoerrno本身是一个int型的全局变量,库函数在发生错误时,可以直接返回一个错误的标识,比如-1

2020-07-08 15:19:17 297

转载 size_t类型

size_t类型#ifndef __SIZE_TYPE__#ifdef _WIN64#define __SIZE_TYPE__ long long unsigned int#else#define __SIZE_TYPE__ long unsigned int#endif#endif总结:64位架构中被定义为:long long unsigned int32位架构中被定义为:long unsigned int参考资料C语言学习:size_tsize_t 这个类型的意义是什么?

2020-07-07 16:49:42 293

原创 共享内存模型UMA NUMA COMA

共享内存模型多处理器环境的内存共享模型主要有3种:Uniform Memory Access (UMA)Non-uniform Memory Access (NUMA)Cache-only Memory Access (COMA)UMAUMA(一致性内存访问)的特点是多个处理器通过一条总线访问系统所有可用的内存,每个处理器访问内存的时间是一样的,所以称为一致性内存访问。UMA存在的问题是多个处理器通过一条总线访问内存,使共享总线上负载增加。多个处理器会争用memory controlle

2020-07-07 01:28:38 2889

原创 Source Insight 4 导入工程

Source Insight 4 导入工程导入工程经验贴必会工具 Source Insight篇Source Insight创建工程SI导入和高亮.s与.S汇编文件如何用source Insight查看.s文件

2020-07-06 06:29:10 1907

原创 vs code设置中文显示

vs code设置中文显示我已经安装过了,就直接用中文的来演示了,步骤是一样的按快捷键:ctrl+shift+p在搜索框中输入configure language,然后回车点击红色方框中的选项4.安装其他语言5.选择要安装的语言包...

2020-07-05 22:57:03 529

原创 Ubuntu 18.04 LTS源码构建bcc

Ubuntu 18.04 LTS源码构建bcc目前安装bcc有两种方式,一种是直接使用发行版提供的软件包,Ubuntu里叫bpfcc-tools,CentOS7中的是bcc-tools。另一种方式是源码编译安装。推荐通过源码编译安装。第一种和第二种方式只能二选一,否则会有冲突导致不可用有人反应第一种方式安装bcc后,BPF模块各种出错。目前通过源码编译安装是最稳定最安全的方法。下面将详细介绍通过源码编译安装bcc。踩坑指南Linux发行版最好用Ubuntu,不要用CentOS7尽量不要用曾

2020-06-12 11:38:06 2631 3

转载 C语言中常量后缀,u或U,l或L,f或F问题

原文地址:C语言中常量后缀,u或U,l或L,f或F问题小白在学习过程中有时会在程序中看到0u或是0ul等常量有后缀的情况,如果没接触到C语言常量后缀的话可能就有点疑惑~其中的u为unsigned,l为long,f为floatC语言中常量的默情况:整型默认为有符号int;浮点型默认为double;如果整形常量大小超出int,默认自然就为long int;如果需要无符号整型常量的话就可以在常量后面加u或是U,如0u或是0U,同理可以在常量后面加ul或UL表示无符号长整型常量;而浮点型常量后缀只有f或F

2020-05-13 15:49:27 4899

原创 buddy伙伴系统

Linux内存管理简述Linux的内存管理不仅与处理器的架构相关,还要综合考虑性能需求。在Linux内核内存管理的框架中,最底层的page allocator是对物理内存进行管理的模块,负责管理所有的物理内存,分配和释放都是以page为单位,大小是2^N个连续的物理内存页。所有的内存管理都是以page allocator为基础,采用的算法为经典的Buddy(伙伴算法)。对于UMA架构,比如SMP,只有一个物理内存节点,但是对于服务器的NUMA架构,会有多个物理内存节点。Linux为了管理所有内存节点的物

2020-05-10 20:29:15 1046

原创 使用sparse进行类型安全检查

Linux内核开发文档:Using sparse for typecheckingStack Overflow:What does the__attribute__((force)) do?

2020-05-07 12:00:19 234

原创 Linux可执行文件与进程的虚拟地址空间

Linux可执行文件与进程的虚拟地址空间一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。一个可执行文件包含可被CPU执行的指令和待处理的数据,上CPU之前,指令和数据全部被翻译成成二进...

2020-05-03 18:33:31 846

原创 在64位Linux中编译32位AT&T格式的汇编程序

alloc.s源代码# 目的:用于管理内存使用的程序——按需分配和释放内存# # 注意:使用这些例程的程序将要求一定大小的内存,在实际操作中,我们使用的内更大,但在回传指针前将之放在开始处,。我们增加一个大小子段,以及一个# AVAILABLE/UNAVAILABLE标记。# 因此,内存看起来如下所示# # ##################################...

2020-05-01 16:41:45 398

原创 X86段页式内存寻址学习

X86段页式内存寻址学习Intel所有型号的处理器在启动时或者reset后,都处于实模式,而今几乎所有的操作系统都工作在保护模式下。实模式和保护模式都使用分段的方式管理程序的代码和数据,但是他们却有着本质的不同。实模式下的内存寻址8086/8088的时代没有保护模式的概念,它们送上地址总线的都是物理地址。8086的片外总线位宽一共20位,从AD0~AD19,这20位总线是被地址总线,数据总线...

2020-04-19 19:21:58 456

转载 PC主板晶振的分类及作用

PC主板晶振的分类及作用主板晶振的作用概括的说就是产生原始的时钟频率,这个频率经过频率发生器放大或缩小后就成个主板上各种不同的总线频率。晶振可以分为4类,时钟晶振,实时晶振,网卡晶振,声卡晶振。时钟晶振为14.318MHz,这个晶振与时钟产生电路(时钟发生器或时钟芯片ISC)相连,为主板产生基准时钟频率。实时晶振的频率为32.768KHz,是一个RTC时钟,是系统时间的基准时钟,在上电之前,为南...

2020-04-09 17:00:43 4263

原创 计算机是怎么运行的?为什么它可以自动化的工作?这和时钟信号又有什么关系?

时钟晶振和实时晶振主板晶振的作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。

2020-04-09 12:53:11 4182 5

转载 南桥芯片与北桥芯片

原文地址什么是芯片组芯片组(英语:Chipset)是一组共同工作的集成电路“芯片”,并作为一个产品销售。它负责将计算机的微处理器和计算机的其他部分相连接,是决定主板级别的重要部件。以往,芯片组由多颗芯片组成,慢慢的简化为两颗芯片(北桥芯片和南桥芯片),现在则只有一颗南桥芯片。在计算机领域,“芯片组”术语通常是特指计算机主板上的南桥/北桥芯片。当讨论基于x86处理器的个人电脑时,芯片组一词通常...

2020-04-07 10:28:37 8775

转载 什么是时钟脉冲,CPU为什么需要时钟,时钟信号是怎么产生的?

什么是时钟脉冲,CPU为什么需要时钟,时钟信号是怎么产生的?什么是脉冲上图的一个方波称为一个脉冲,类似于人类的脉搏跳动。对于每一个方形脉冲,电压或电路从0上升到最大值的那条线叫做上升沿;反之,电压或电流逐渐下降的那条线叫做下降沿。一个脉冲称为CPU的一个时钟信号,或者时钟脉冲。一个脉冲周期就叫CPU时钟周期,一个时钟周期内时钟信号震荡一次。脉冲的单位两个脉冲相继出现的间隔时间,就是脉冲...

2020-04-06 11:51:40 30847 12

原创 Intel Core处理器功能连接图

Intel Core处理器功能连接图该框图提供了所示平台内功能,功能和连接性的描述。

2020-04-04 19:37:51 339

翻译 页面保护

原文地址 Page Protection Keys页面保护Page Protection Keys(页面保护键)由于写入错误,内存损坏是复杂的多线程应用程序的问题。 例如,并非数据库应用程序中的代码的每个部分都需要具有相同的特权级别。 日志编写器应具有对日志缓冲区的写特权,但在其他页面上应仅具有读特权。 同样,在具有用于某些关键数据结构的生产者线程和消费者线程的应用程序中,生产者线程可以被赋...

2020-04-04 18:48:47 555

转载 晶体管作为开关的工作原理

这篇介绍晶体管的文章写的很好 晶体管基础知识晶体管作为开关的工作原理令人惊讶的是,首个可运行晶体管于 1947 年 12 月 23 日面世,距今已有 70 年!1 晶体管或许是人们发明的最具革命性的元器件之一。它的出现为集成电路、微处理器以及计算机内存的产生奠定了基础。1.何为晶体管?晶体管又称双极结型晶体管 (BJT),是由电流驱动的半导体器件,用于控制电流的流动,其中,基极引线中的较...

2020-04-04 15:57:19 5236

原创 CPU芯片的制造过程以及CPU工作原理

详见视频介绍 带你了解光刻机以及芯片生产制造过程CPU芯片的制造过程1.制造的第一步是设计电路图2.下一步是生产晶片芯片的基板是由沙子制成的,这个基板叫做“硅晶圆”。在制造晶圆的过程中,要将硅提纯并熔化,再从中拉出柱状的单晶硅棒。其产物是完美的硅晶格,之后晶体管将安置在上面。3.利用光刻技术将设计好的电路结构转印到晶圆上将感光遮罩均匀地涂在晶圆上。紫外线将电路结构烙印...

2020-04-03 23:20:40 2826

原创 Intel 处理器发展年历

Intel 处理器发展年历Intel 4004 (1971)Intel 8008 (1972)Intel 8080 (1974)Intel 8085 (1976)Intel 8086 (1978)Intel 8088 (1979)Intel 80286 (1982)Intel i80386 (1985)Intel i80486 (1989)Intel Pentium (199...

2020-04-03 17:33:44 4069

原创 HTT超线程技术,CPU,core,package,die的概念

超线程技术Intel超线程技术(Intel HT技术)是为了在多任务环境下执行多线程操作系统和应用程序代码或单线程应用程序时提高IA-32处理器的性能而开发的。超线程技术使单个物理处理器可以使用共享的执行资源并发地执行两个或多个独立的控制流(线程)。一个线程就是一个控制流。超线程技术执行多线程是并发的,而双核心(即两个物理CPU)执行多线程是并行的,如下图Intel HT技术是IA-32处...

2020-04-03 15:25:22 10007

转载 RAM,DRAM,SRAM,ROM和FLASH

转载于维基:维基百科RAM随机存取存储器(英语:Random Access Memory,缩写:RAM;也叫主存,内存)。RAM是一种易失性存储器的类型,一断电里面的内容就消失。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM则不会。SRAM静态随机存取存储器(Static Random Access Memory,SRAM)是RAM的一种。所谓的“...

2020-04-02 15:16:25 378

转载 什么是前端总线,后端总线,内部总线、系统总线,外部总线,地址总线,数据总线,控制总线

文章部分内容来自于 电子发烧友 内部总线、系统总线和外部总线汇总部分内容来自于 知乎 前端总线,系统总线,内部总线,外部总线本文是在两篇文章的基础上进行了二次加工,对两篇文章的精华内容进行了提炼,删掉了对理解主题不重要的,或已经过时的内容。并且为了更好的理解,自己又加了一些文字和图片。说在前面的话对于这样的概念不需要太过于纠结,看完以后心中有个大体的把握即可,因为概念性的东西没有标准...

2020-04-01 22:36:40 7510 2

转载 PCI-E与SATA SSD如何选

文章转载于中关村在线 PCI-E与SATA SSD如何选?一分钟看懂1.为什么固态硬盘要采用PCI-E接口计算机发展至今已60年有余,随着人们对存储速度要求的不断提升,存储介质从最初的打孔卡到现在的SSD,发生了翻天覆地的变化。现如今越来越多的中高端SSD开始选择PCI-E接口来进行SSD与主板的对接,以提升读写速度。作为一名普通用户,我们应该选择高端的PCI-E SSD还是SATA SSD...

2020-03-31 22:47:39 579

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除