计算机基础理论知识梳理篇(一):数据类型长度、内存页、IPC
字长与数据类型长度
字长指CPU在同一时间能够处理二进制数据的位数,是由其外接数据总线(地址总线决定了CPU的寻址空间,如16位微型机的地址总线为20位,其可寻址空间为220 = 1MB)的条数决定的。早期的微机字长一般是8位或16位,目前市面上的计算机的处理器大部分已达到64位。但大多数计算机均支持变字长运算,即机内可实现半字长、全字长(或单字长)、双倍字长运算。ANSI C/C++ 定义了基本数据类型长度,而操作系统字长可能与物理机器实际字长不一致,编译器是根据操作系统字长和ANSI C/C++ 标准来决定数据类型长度的,比如long类型在64位系统上占用8字节,在32位系统上占用4字节。因此64位系统比32位系统代码更长,占用更多的内存空间也就好理解了。
页、块(簇)与扇区
- 扇区是磁道的一个分区,扇区的大小是固定的512B,是磁盘读写的基本单位。
- 块(Block,Windows中称簇Cluster)是文件分配磁盘空间的基本单位(也可以说是系统读写磁盘的基本单位),每个块可以包括2n个扇区(文件系统可支持的块数量有上限,FAT16簇总数只有216个,FAT32簇总数有232个)。
一个文件通常存放在一个或多个块里,两个文件不能存放在同一个块中。比如,有1024个文件,大小为1字节,这些文件在硬盘上占用的空间不是1B而是1024个块,如果一个块为8 * 512B = 4K,那么就占了4M的空间。块越大,磁盘碎片就越少,硬盘的速度就越快,但对小文件而言,硬盘的使用效率就会越小。磁盘如果主要存放电影等大文件设置大块,如果主要存放很小的文件设置小块。 磁盘碎片:指文件被分散保存到磁盘的不同地方,而不是连续的块。造成该问题的根本原因可能是文件内容长度的增加。有人认为,虚拟内存空间(硬盘的特定区域,Linux中称swap空间)中的临时交换文件频繁读写,是产生硬盘碎片的主要原因。我对这种说法是存疑的,既是临时文件,其内容在系统重启后就会失效,当然服务器一般是不会经常重启的;因此并不需要对PC机频繁进行磁盘碎片的整理,对服务器而言,若是虚拟内存空间中的内容频繁改变,进行磁盘碎片整理意义不大。Windows pagefile.sys文件一旦创建则长度固定,其占用的连续簇形式就固定下来,读写并不改变pagefile.sys的大小,当该文件告罄后系统创建temppf.sys依旧占用连续的一块区域(当然temppf.sys与pagefile.sys可能不在一个毗邻连续的区域)。Linux 虚拟内存空间位于单独的swap分区中,不影响其他分区文件。
- 页(Page)指内存分页存储管理中将一个进程空间划分成多个大小相等的片,并给以编号0、1、2等,是页置换(通过页面置换算法来实现)的基本单位。相应地,也把内存空间分成与页面相同大小的若干个块,称为(物理)块或页框(Frame),块或页框是内存空间分配的最小单位,也同样加以编号。页大小是2n个扇区大小,通常为512 B~8 KB。系统是通过页表来维护页到块的映射关系的。页置换可解决空闲物理内存空间不足的问题。常见页面置换算法有如下几种:
1)先进先出法FIFO; 2)最佳置换法OPT:选择将来不再使用或在最远的将来才被访问的页调换出去; 3)最近最久未使用LRU:选择在最近一段时间里最久没有使用过的页面予以淘汰; 4)Clock置换算法(LRU算法的近似实现); 5)最少使用(LFU)置换算法; 6)页面缓冲置换算法。
管道(Pipe) 、命名管道(FIFO) 与 IPC Socket
- 管道用于有亲缘关系的进程间通信,是内核管理的一个缓冲区,是一段环形数据结构,可循环利用。其一端连接一个进程的输出,用于向管道中放入信息,若已将管道填满则等待另一端读出;另一端连接一个进程的输入,用于从管道中取出信息,若未读到信息则等待另一端放入。
- 命名管道(Named PIPE)在Linux文件系统中是一种特殊文件类型(p),客服了无名管道的限制,能用于无亲缘关系的进程间通信。当一个进程以读方式打开该文件,而另一个进程以写方式打开该文件时,内核就会在这两个进程之间建立管道。其之所以叫FIFO,是因为管道本质上是一个先进先出的队列数据结构,最早放入的数据被最先读出来,从而保证信息交流的顺序。
cenze@kylin:~$ mkfifo mypipe #先写或先读命名管道都将被阻塞 cenze@kylin:~$ ls -l mypipe > mypipe #多个用户同时读,只有一个可以获得数据 #所以命名管道可以理解成抢占式的,而非订阅式的 cenze@kylin:~$ cat mypipe prw-rw-r-- cenze cenze 2月 : mypipe
- UNIX Domain Socket(IPC Socket)是在网络Socket框架上发展出的一种IPC机制,实现了在本机上把数据从一个进程拷贝到另一个进程,比网络Socket更有效率(无需网络协议栈打包拆包、计算校验和、维护序号和应答等)。IPC Socket也采用类似FIFO文件(p)的形式通过一个指定的文件(s)对应内核的一条通道,相互通信的两个进程读写该文件实际是读写内核通道。下边这段来自 wikipedia:
Like named pipes, Unix domain sockets support transmission of a reliable stream of bytes (SOCK_STREAM,compare to TCP). In addition, they support ordered and reliable transmission of datagrams (SOCK_SEQPACKET,compare to SCTP), or unordered and unreliable transmission of datagrams (SOCK_DGRAM, compare to UDP). The Unix domain socket facility is a standard component of POSIX operating systems.
计算机基础理论知识梳理篇(一):数据类型长度、内存页、IPC的更多相关文章
- 计算机基础理论知识梳理篇(三):VLAN与VLAN网卡相关概念
VLAN(Virtual Local Area Network) 虚拟局域网(VLAN,802.1Q)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能.部门及应用等因素将它们 ...
- JQuery基础知识梳理篇
这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...
- python基础知识梳理----3基本数据类型,int,bool,str ,for 循环,迭代
一:python的基本类型 1.int -----整数,主要进行数学运算 2.str -----字符串,可以保存少量数据,并进行相关操作, 3. bool ---布尔类型,判断真假 4.list ...
- python基础知识梳理-----4基本数据类型,list ,tuple 操作 ,增删该查,以及其他功能函数
一:列表的增加 1: append() lis = ['张三','李四','王二码子','李鹏智障'] lis.append('赵武') # 这种加法是放在最后 print(lis) 输出 ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- Oracle知识梳理(三)操作篇:SQL基础操作汇总
Oracle知识梳理(三)操作篇:SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式: CREATE TABLE table_name ( col_ ...
- Jmeter 接口测试知识梳理——应用基础篇
Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...
- Jmeter 接口测试知识梳理——持续集成篇
Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter + Ant ...
随机推荐
- Android 系统版本和API level的关系表
Android 系统版本和API level的关系表 wiki: https://zh.wikipedia.org/wiki/Android%E6%AD%B7%E5%8F%B2%E7%89%88%E6 ...
- windows搭建golang环境
由于墙的存在,很多网址无法下载,推荐https://studygolang.com/dl去下载. windows需要配置几个环境变量,我是下载的压缩文件,所以需要自己配置,通过安装程序安装的应该不需要 ...
- wxPython的简单应用
- centos下 telnet访问百度
先在命令行输入以下命令: telnet www.baidu.com 80 点击确认之后出现如下界面 然后接着输入以下两行命令 GET /index.html HTTP/1.1 Host: www.ba ...
- 总结JAVA----IO流中的File类
对于IO流中File类的总结 File类的基本概念 File类只能用于完成对于文件属性(是否存在.可读性.长度)的一些操作,不能用于文件的访问. File类的对象 File类的对象存储的是文件的绝对路 ...
- Spring service本类中方法调用另一个方法事务不生效问题(转载)
前些日子一朋友在需要在目标对象中进行自我调用,且需要实施相应的事务定义,且网上的一种通过BeanPostProcessor的解决方案是存在问题的.因此专门写此篇帖子分析why. 1.预备知识 aop概 ...
- 百度杯”CTF比赛 九月场 123
进去后让登录,先看源码有提示 进到user.php 后发现是空的,看了wp才知道,有bak 下载下来直接爆破 但是那个1990是蛮骚的 直接进去登录 登录成功后是空的,走fd看看是怎么过 的 改包然后 ...
- 基于aws api gateway的asp.net core验证
本文是介绍aws 作为api gateway,用asp.net core用web应用,.net core作为aws lambda function. api gateway和asp.net core的 ...
- 命令行获取zabbix最新的issues - jq 解释json
0.安装jq wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 chmod +x ./jq c ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...