计算机基础理论知识梳理篇(一):数据类型长度、内存页、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 ...
随机推荐
- 转摘Linux命令工作中常用总结
Linux命令工作中常用总结 1. 搜索 在vi和vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜索定位: 在vi和vim界面中输入:"/" ...
- vue实现打印功能的两种方法
第一种方法:通过npm 安装插件 1,安装 npm install vue-print-nb --save 2,引入 安装好以后在main.js文件中引入 import Print from 'v ...
- ASP.NET Zero--Migration控制台应用程序
Migration控制台应用程序 AspNet Zero包含一个工具Migrator.exe,用于轻松迁移数据库.您可以运行此应用程序来创建/迁移host和租户数据库. 该应用程序从它自己的appse ...
- Linux 文件权限管理
1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...
- https协议详解
HTTPS协议建立过程 1) 客户端首次发送请求时,由于客户端(浏览器等)对一些加解密算法的支持程度不一样,但是在TLS传输中必须使用相同的加解密算法,所以在TLS握手的阶段,客户端告诉服务器端自己支 ...
- SQLServer查询计划
参考:http://blog.csdn.net/luoyanqing119/article/details/17022649 1. 开启方式 菜单栏:query---Display Estimated ...
- python之面相对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...
- 监控redis
[4ajr@redis1 scripts]$ cat redismonitor.sh #!/bin/bash #想要什么监控项再添加 rediscli="/soft/redis/bin/re ...
- 使用Flame Graph进行系统性能分析
关键词:Flame Graph.perf.perl. FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图. 从底向上像火苗一样逐渐变小,也反映了相互之间 ...
- Ansible第二章:palybook介绍与使用--小白博客
playbook tasks variables templates handlers roles yaml介绍 yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xm ...