- 博客(10)
- 收藏
- 关注
原创 sendfile零拷贝技术能提升多少性能
根据sendfile对服务端传输大文件是有很大改进的,而对于小文件(小于等于16K?),其性能提升并不明显。对于FTP服务器和文件服务器而言使用sendfile等零拷贝技术是有必要的,而其他用途可根据实际选择使用。
2023-03-16 10:47:02 326
原创 Unix环境高级编程之fork和vfork,exec函数族,wait和waitpid,exit和_exit
我之前一篇文章中写过fork与缓冲区的问题,写的主要是针对那个问题,今天就来讲一下常用的系统调用fork,exec,wait,exit,这几个系统调用关联性较强,一起介绍fork#include<unistd.h>#include<sys/types.h>pid_t fork(void); //子进程返回0,父进程返回子进程pidLinux下调用fork会创建一个子进程,这个子进程会接着执行父进程的代码,子进程独占一份内存空间,它会将父进程的所有可读写的段复制过来(比如
2022-05-01 01:05:34 316
原创 OS内存管理之页表结构(分层分页,哈希页表)
在前面介绍分页的文章中,采用了一个32位机分页的例子,即把虚拟地址p的前20位作为页码,在页表中查询对应帧码。维护一个进程的页表就需要4M内存空间,该空间应是连续(为了在O(1)时间内查找),但有时候内存碎片较多,并不想在内存中分配4M这么多的连续地址空间,所以可以采用分层页表的方式。分层页表继续使用32位系统做例子,为了不使用4M那么多的连续地址空间,可以把一个页表再进行分块,一个页表中有220个条目,我们把他拆成210块,那么每块就有210个条目,这些块就可以分配到不连续的内存空间中,为了能找到每一
2022-04-29 21:55:59 2332 1
原创 OS内存管理之TLB概述(转换表缓冲区)
上一篇文章讲了分页基本概念,我们获取虚拟地址p[31:0]之后,先将页码p[31:12]送入页表中查找对应物理帧基地址,查找时间是O(1)的,页表位于内存中,所以这需要一次内存访问。得到基地址后,将其与页偏移组合得到真实物理地址,这时再访问一次内存,采用这种方案,访问一个字节需要两次内存访问,我们都知道内存访问是流水线CPU中延迟最高的一个阶段,进行两次内存访问速度实在是太慢了!有什么办法可以优化呢。这里引出一项技术TLB(转换表缓冲区),TLB是高速内存,它每个条目由两部分组成:键和值,在这里键和值分别
2022-04-27 23:23:39 1076
原创 OS内存管理之分页
虚拟内存是操作系统内存管理的一个重要技术,设想在两个不同的进程中有两个变量,他们的地址相同,那么这两个变量的值是否是相同的呢,显然这是不同的,不信你可以在linux下运行如下代码(windows下是无法编译的)#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/wait.h>#include<errno.h
2022-04-27 22:43:32 846
原创 fork与缓冲区问题
fork是unix下创建子进程的函数pid_t fork(void); //创建一个进程,父进程返回值为子进程pid,子进程返回值为0当我们运行如下代码时,#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/wait.h>#include<errno.h>#include<stdio.
2022-04-24 14:17:28 396
转载 Apktool反编译后无法回编问题
转自https://zhidao.baidu.com/question/985380511600977699.html?qbl=relate_question_3回汇编时出现:F:\apktool>apktool b Hello Hello.apkException in thread “main” brut.androlib.AndrolibException: brut.directory.PathNotExist: apktool.ymlat brut.androlib.Androli
2021-08-23 12:11:28 2155
原创 c语言计算行列式
大一刚学了c和线性代数,尝试一下写个行列式求值程序#include<stdio.h> #include<math.h> int main(){ int det(int b[][10],int x); //定义求行列式函数 int a[10][10]; //定义一个固定数组 int n,i=0,j=0,l; printf("输入行列式阶数\n"); scanf("%d",&n); printf("输入行列式元素空格隔开\n") for(i=0;i<n;i+
2020-10-16 23:01:26 5783 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人