字长与数据类型长度

字长指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的更多相关文章

  1. 计算机基础理论知识梳理篇(三):VLAN与VLAN网卡相关概念

    VLAN(Virtual Local Area Network) 虚拟局域网(VLAN,802.1Q)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能.部门及应用等因素将它们 ...

  2. JQuery基础知识梳理篇

    这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...

  3. python基础知识梳理----3基本数据类型,int,bool,str ,for 循环,迭代

    一:python的基本类型 1.int  -----整数,主要进行数学运算 2.str  -----字符串,可以保存少量数据,并进行相关操作, 3. bool ---布尔类型,判断真假 4.list ...

  4. python基础知识梳理-----4基本数据类型,list ,tuple 操作 ,增删该查,以及其他功能函数

    一:列表的增加 1: append() lis = ['张三','李四','王二码子','李鹏智障'] lis.append('赵武')      # 这种加法是放在最后 print(lis) 输出  ...

  5. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  6. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  7. Oracle知识梳理(三)操作篇:SQL基础操作汇总

    Oracle知识梳理(三)操作篇:SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式:       CREATE TABLE  table_name ( col_ ...

  8. Jmeter 接口测试知识梳理——应用基础篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...

  9. Jmeter 接口测试知识梳理——持续集成篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter + Ant ...

随机推荐

  1. Jmeter设置代理,抓包之app请求

    步骤: 1. Jmeter选择测试计划,添加线程组,添加http请求,添加监听器-察看结果树 2. 添加http代理服务器,右键添加非测试元件-添加http代理服务器 3. 端口改为8889,目标控制 ...

  2. linux备份还原命令

    使用范围:1.可以作为系统还原点,还原到备份时的状态 2.系统完全损坏后无法启动,通过引导盘恢复 一.备份还原系统命令 方法一: 备份:tar cvpzf backup.tgz --exclude=/ ...

  3. 伙伴系统之避免碎片--Linux内存管理(十六)

    1 前景提要 1.1 碎片化问题 分页与分段 页是信息的物理单位, 分页是为了实现非连续分配, 以便解决内存碎片问题, 或者说分页是由于系统管理的需要. 段是信息的逻辑单位,它含有一组意义相对完整的信 ...

  4. c/c++ linux 进程间通信系列5,使用信号量

    linux 进程间通信系列5,使用信号量 信号量的工作原理: 由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的: P(sv):如果sv的值大于零,就给它减1:如果 ...

  5. c/c++ 网络编程 UDP up/down 网卡

    网络编程 UDP up/down 网卡 在程序里动态改变网卡的状态.注意:程序运行需要root权限. 程序运行的方法: sudo ./a.out 1,关闭网卡 #include <stdio.h ...

  6. hrbust1140 数字和问题

    题目: 定义一种操作为:已知一个数字,对其各位数字反复求和,直到剩下的数是一位数不能求和为止.例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14,再对14的各位数字求和得到1 + ...

  7. Saltstack_使用指南05_数据系统-Pillar

    1. 主机规划 Pillar文档 https://docs.saltstack.com/en/latest/topics/pillar/index.html 注意事项 修改了master或者minio ...

  8. easyui中datagrid+layout布局

    1.掌握layout布局 首先,layout布局的具体使用可参考官网http://www.jeasyui.net/plugins/162.html layout布局分为东南西北中五个区域,如图我们将其 ...

  9. 【English】20190328

    Emotions情绪 [ɪ'moʊʃənz]  Run Your Life for Teens影响你的青少年生活[ti:nz] Don't Let Your Emotions Run Your Lif ...

  10. HBase源码实战:BufferedMutator

    /** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agr ...