文本文件和二进制文件的定义

  首先,计算机的存储在物理上是二进制的,也就是在物理存储方面没有区别都是 01 码。所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的,也就是编码上。简单来说,文本文件是基于字符编码的文件,常见的编码有 ASCII 编码,UNICODE 编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码

阅读全文 »

查看 Linux 命令的系统调用和库函数的调用可通过下面的命令。

  • strace -c command:判断 command 命令的系统调用的类型、次数、消耗时间(-f 则连同 command 命令 fork 出来的子进程一同统计,-e 指定列出某一具体的系统调用的参数)
  • ltrace 用法同 strace, 但是追踪的是命令调用的库函数,strace 追踪的是系统调用

下面是 CPU 缓存的一些概念,所用命令均是在 Linux 平台下

  • 可通过命令 getconf -a| grep CACHE | grep size 查看 CPU 的各级缓存大小
  • 也可以通过命令 lscpu | grep ^L 查看
  • CPU 缓存以行(line)单位,主内存以页(page)为单位,磁盘以块(block)为单位
  • CPU 缓存一般分为指令缓存(I-Cache)和数据缓存(D-Cache),且两者一般都是分开的
  • 缓存控制器(cache controller)判断 CPU 要获取的指令和数据是否在 CPU 缓存中,从一级缓存往下找,直到主内存和磁盘,且从找到的那一级开始往上面所有级缓存 , 如下图所示:

  • 评判软件优秀与否的一种标准:对 cpu 缓存的命中率

内核版本与 CPU 调度算法

早期 Linux 版本中的调度算法非常简单易懂:在每次进程切换时,内核扫描可运行进程的链表,计算进程的优先权,然后选择 “最佳” 进程来运行。这个算法的主要缺点是选择 “最佳” 进程所要消耗的时间与可运行的进程数量相关,因此,这个算法的开销太大,在运行数千个进程的高端系统中,要消耗太多的时间。

Linux 2.6 的调度算法就复杂多了。通过设计,该算法较好地解决了与可运行进程数量的比例关系,因为它在固定的时间内(时间复杂度 O (1))选中要运行的进程。它也很好地处理了与处理器数量的比例关系,因为每个 CPU 都拥有自己的可运行进程队列。而且,新算法较好地解决了区分交互式进程和批处理进程的问题。因此,在高负载的系统中,用户感到在 Linux2.6 中交互应用的响应速度比早期的 Linux 版本要快。

阅读全文 »

linux 环境变量种类

按照生成周期看,可以分为二类

  • 永久的(需要修改配置文件,变量永久生效)
  • 临时的,使用 export 命令声明即可,变量在关闭 shell 时失效.
阅读全文 »

可执行程序的类型

Linux 系统上有两类不同的 Linux 可执行程序。

  • 第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是 “完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。

  • 第二类是动态链接的可执行程序。动态可执行程序是 "不完整" 的程序,它依靠外部共享库来提供运行所需的许多函数。

阅读全文 »

当文件名为乱码的时候,无法通过键盘输入文件名,所以在终端下就不能直接利用 rm,mv 等命令管理文件了。
但是我们知道每个文件都有一个 i 节点号,我们可以考虑通过 i 节点号来管理文件。首先,我们要取得文件的
i 节点号。这个可以通过 ls 命令的 - i 选项获得得。

阅读全文 »
0%