理解计算机
文章平均质量分 53
jasonxty
这个作者很懒,什么都没留下…
展开
-
mac下用qemu编译执行linux/kernel
主要参考使用 qemu 搭建内核开发环境 - 离小木 - 博客园主要涉及以下几个点:virtualbox6.1下运行ubuntu server 18.04,然后打开ssh server,用于mac主机访问。否则virtualbox那个屏幕不能自动缩放真是辣眼睛。因为需要一个linux来编译kernel,直接在mac上编译估计没那么容易。sudo apt-get install openssh-server主机配置port forwarding。在虚拟机上下载linux k.原创 2022-01-03 15:48:44 · 1709 阅读 · 7 评论 -
可否不重启更新动态链接库?
https://stackoverflow.com/questions/10001013/update-shared-libraries-without-restarting-processeshttps://stackoverflow.com/questions/7767325/replacing-shared-object-so-file-while-main-program-is-running从目前来看貌似不大行。只能通过dlopen系列函数倒是可以。其根本原因是什么?需要重新阅读CSAPP原创 2021-03-04 15:52:06 · 402 阅读 · 1 评论 -
Tcl中加载共享库生成自己的命令
Step 1:编写共享链接库代码#include <tcl.h>#include <stdio.h>static int fooCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { printf("called with %d arguments\n", objc); return TCL_OK;}int Foo_Init(T原创 2020-07-13 10:40:38 · 380 阅读 · 0 评论 -
Tcl中的load命令
tcl中的load命令还是很神奇的。在这里翻译一下tcl的load文档,学习一下。名字load - 加载机器代码,初始化新的命令概要load filenameload filename packagenameload filename packagename interp描述这个命令把一个文件中的二进制代码加载到应用的地址空间,然后调用package中的初始化程序把这些代码集成到解释器中。filename是包含二进制代码的文件名。它具体的形式在不同的系统上面会有所不同,但是在翻译 2020-07-13 10:31:38 · 1867 阅读 · 0 评论 -
程序员需要知道的SSD基本原理
转自http://oserror.com/引言SSD是目前商用服务器上非常流行的存储介质,因此,作为软件开发人员,需要了解的SSD基本原理,以便开发时能更好地发挥其优势,规避其劣势。本文总结了作为软件开发人员需要了解的SSD基本原理,全文组织结构如下:SSD的读写速度 SSD内部芯片的简单存取原理 SSD的读写特性 SSD的over-provisioning和garbage-co...转载 2019-04-28 17:29:35 · 1598 阅读 · 0 评论 -
哈弗结构/冯诺依曼结构
https://www.zhihu.com/question/22406681首先是定义上的差别。哈弗结构:数据和指令分开存储冯诺依曼结构:数据和指令混合存储哈弗结构高效、而且安全,因为对于不同特性的东西,分开总是好一些。其次重要的是要明白数据的概念,有时候程序也会需要当做数据来处理。所以很难有绝对的哈弗结构,当然为了吸收哈弗结构的优点,也就很少有仅仅采用冯诺依曼结构的处理器。...原创 2018-02-28 21:00:10 · 685 阅读 · 0 评论 -
为什么单片机中既有FLASH又有EEPROM?
转自http://www.elecfans.com/lab/MCU /20161227464036.html 单片机运行时数据都存储在RAM中,在掉电后RAM的数据是无法保留的,那么怎么使得在掉电后数据不丢失呢?这就需要使用EEPROM或FLASHROM等存储器来实现。ROM最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了PROM,可以自己写入一次,要是写错了,只能换一片。随着不断转载 2017-09-17 13:57:48 · 1721 阅读 · 1 评论 -
read和write真的是无缓(unbuffered)冲的吗?
All disk I/O goes through the kernel’s block buffers (also called the kernel’s buffer cache). The exception to this is I/O on a raw disk device (原始磁盘设备), which we aren’t considering. (Some also provid原创 2017-05-14 08:59:40 · 333 阅读 · 0 评论 -
线程
在多次阅读《csapp》的基础上对线程相关的知识做一个总结。 对于线程的研究,源于试图理解“多次关闭一个已经关闭的描述符,对于线程化的程序来说会带来灾难”,可惜最后还是没理解。首先线程是用来实现并行逻辑流的一种方式,它既想像进程一样由操作系统调度,又想像I/O多路复用一样共享进程的虚拟地址空间,从而方便的实现变量共享。从实现上讲它是一个“轻量化的进程”,线程有线程上下文,包括线程ID/栈/栈原创 2017-01-05 17:13:52 · 367 阅读 · 0 评论 -
异常控制流
之前学习微机原理的时候,总感觉没什么东西。除了中断和寻址有点意思。但是概念还是没有理清楚,感觉什么都是中断。。。最近看了《深入理解计算机系统》,引入异常控制流(Exceptional control flow)的概念, 从而对计算机中各种“中断”有了层次上的理解。总结如下。定义:异常控制流通过改变程序的执行序列来对系统和应用的行为做出反应。异常控制流发生在计算机系统的各个层次。在硬件层,硬件检测原创 2016-12-22 11:14:52 · 402 阅读 · 0 评论 -
怎样写出更快的C程序
由于存储器的设计和语言的存储安排,一个具有良好局部性的程序往往可以更快的执行。——总结自《深入理解计算机系统》局部性通常有两种不同的形式:时间局部性和空间局部性。在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。总之,编写高速缓存友好的代码涉原创 2016-11-22 22:14:54 · 370 阅读 · 0 评论 -
动态链接共享库
在讲动态链接时,不得不先复习一下静态链接。 像Unix ld程序这样的静态连接器以一组可重定位目标文件和命令行参数作为输入,生成一个完全连接的可以加载和运行的可执行目标文件作为输出。为了构造可执行文件,连接器必须完成两个任务。1.符号解析 目标文件定义和引用符号。符号解析的目的是将每个符号引用刚好和一个符号定义联系起来。2.重定位 编译器和汇编器生成从地址0开始的代码和数据结构。链接器通过把每原创 2016-12-13 19:14:22 · 1298 阅读 · 0 评论 -
数据地址对齐
数据地址对齐是从C语言映射到机器语言时,C语言隐含做的事情。这一点值得理解。我们先看看数据: C声明 Intel数据类型 汇编代码后缀 x86-64大小(字节) IA32大小 char 字节 b 1 1 short 字 w 2 2 int 双字 l 4 4 long int 四字 q 8 4 lo原创 2016-12-04 10:20:31 · 3313 阅读 · 1 评论 -
理解程序调用以及由此引出的缓冲区攻击问题
在阅读《深入理解计算机系统》第三章,程序的机器级表示的时候,解开了以前学习C语言的时候的一些疑惑,在这里稍做记录。程序在调用另一个程序的时候涉及下面的这个数据结构——栈帧,这个数据结构是实现整个过程的关键。调用者程序调用(call指令)另一个被调用者程序的时候,首先调用者程序将将当前程序计数器的值(下一条指令的地址)保存(push)在栈帧中,再跳转到被调用者程序。然后被调用者程序保存原来的帧指针(原创 2016-12-03 15:01:22 · 368 阅读 · 0 评论 -
浮点数
最近在学习Linux必然逃不开C语言,在格式化输入输出的时候遇到%f和%g。通过查阅《深入理解计算机系统》,总结如下。二进制小数先说下十进制小数dmdm−1…d1d0.d−1d−2…d−nd_md_{m-1}\ldots d_1d_0.d_{-1}d_{-2}\ldots d{-n}其中每个十进制数的取值范围是0-9。这个表示法描述的数值dd定义如下: d=∑i=−nm10i∗did=\sum_{原创 2016-11-20 15:06:57 · 496 阅读 · 0 评论 -
一兆到底是什么?
本科的时候一直没搞明白1M到底什么时候表示100万。K(kilo),M(mega),G(giga)和T(tera)这样的前缀的含义依赖于上下文。对于DRAM和SRAM容量相关的计量单位,通常K=210K=2^{10},M=220M=2^{20},G=230G=2^{30},T=240T=2^{40}。对于像磁盘和网络这样的I/O设备容量相关的计量单位,通常K=103K=10^3,M=106M=10原创 2016-12-01 20:59:56 · 679 阅读 · 0 评论