「汇编语言」- MS-DEBUG

相关链接
官方文档:Docs/TechNet Archive/MS-DOS/Debug 其他文档:A Guide to DEBUG
参考文献
Wikipedia/Debug (command)[……]

READ MORE

「x86」- 指令集(学习笔记)

问题描述
在学习《汇编语言(第三版)王爽 著》过程中,我们整理出该部分笔记:1)便于日后查阅;2)将我们记忆错误的地方,整理下来,形成对照;
该部分笔记将记录:在 x86 中,常用指令、使用说明,以及相关知识点。
注意事项
该部分的笔记:旨在记录我们理解错误的内容,不能作为汇编语言的学习教程。
解决方案
Classification of Instruction Sets
我们使用 ORACLE/x86 Assembly Language Reference Manual/3.2 General-Purpose Instructions 分类方法,按照该分类进行学习笔记的整理。
关于指令分类: 1)在处理器厂商的手册中,并没有对指令集分类,因此我们也不打算按分类整理指令; 2)但是,在分类列表中,我们可能会添加“类别”列,以辅助我们记忆; 3)指令的分类,参考 ORACLE/x86 Assembly Language Reference Manual 文档;
00.Data Transfer Instructions 01.Binary Arithmetic Instructions 02.Decimal Arithmetic Instructions 03.Logical Instructions 04.Shift and Rotate Instructions 05.Bit and Byte Instructions 06.Control Transfer Instructions 07.String Instructions => 串操作指令 08.I/O Instructions 09.Flag Control (EFLAG) Instructions => 标志处理指令 10.Segment Register Instructions 11.Miscellaneous Instructions
MUL – 乘法
指令格式: MUL <register> MUL <memory location>
对于乘数: 两个乘数:要么全为 8-bit ;要么全为 16-bit ; 当两个乘数全为 8-bit 时:一个乘数放在 AL 中;一个乘数放在 8-bit 寄存器 或 内存字节单元 中; 当两个乘数全为 16-bit 时:一个乘数放在 AX 中;一个乘数放在 16-bit 寄存器 或 内存字单元 中;
对于结果: 当两个乘数全为 8-bit 时:结果保存在 AX 中; 当两个乘数全为 16-bit 时:结果的高位保存在 DX 中;结果的低位保存在 AX 中;
使用示例:

; 示例一、计算 100×10
; 此时乘数[……]

READ MORE

「x86」- 数据传输指令(Data Transfer Instructions)

类别
指令
全称
功能

00
CBW
 
 

00
CWD
 
 

00
CWDE
 
 

00
LDS
 
 

00
LEA
 
 

00
LES
 
 

00
MOV
Move
 

00
POP
 
 

00
POPF
 
 

00
PUSH
 
 

00
PUSHF
 
 

00
XCHG
 
 [……]

READ MORE

「x86」- 01.Binary Arithmetic Instructions

内容简介

类别
指令
全称
功能

01
ADC
 
 

01
ADD
 
 

01
CMP
 
 

01
DEC
 
 

01
DIV
 
 

01
INC
 
 

01
MUL
 
 

01
SBB
 
 

01
SUB
 
 [……]

READ MORE

「x86」- 02.Decimal Arithmetic Instructions

内容简介

类别
指令
全称
功能

02
AAA
 
 

02
AAS
 
 

02
DAA
 
 

02
DAS
 
 [……]

READ MORE

「x86」- 03.Logical Instructions

类别
指令
全称
功能

03
AND
 
 

03
NOT
 
 

03
OR
 
 

03
XOR
 
 [……]

READ MORE

「x86」- 04.Shift and Rotate Instructions

指令
全称
功能

RCL
 
 

RCR
 
 

ROL
 
 

ROR
 
 

SAL
 
 

SAR
 
 

SHL
 
 

SHR
 
 [……]

READ MORE

「x86」- 位及字节指令(Bit and Byte Instructions)

TEST, logical compare
指令格式:

test reg8, imm8
test mem8, imm8

test reg16, imm16
test mem16, imm16

test reg8, reg8
test mem8, reg8

test reg16, reg16
test mem16, reg16

指令功能: 1)将两个操作数进行逻辑“与”操作(这与 AND 类似),但不会改变操作数; 2)并根据结果来修改标志寄存器;
标志寄存器的变化: 1)OF = CF = 0 2)ZF、SF、PF:取决于测试结果; 3)AF:未定义;
指令示例:测试 AL 寄存器的第 3 位 是否为零:

test al, 0x08 ;; 0x08 = 0000_1000B
;; 如果 AL 的第 3 为零,则 test 结果为 0,此时 ZF=1
;; 如果 AL 的第 3 非零,则 test 结果为 1,此时 ZF=0
;; 然后,我们在该指令后使用 jcc 指令簇进行条件跳转[……]

READ MORE

「x86」- 转移指令(Control Transfer Instructions)

类别
指令
全称
功能

06
CALL
 
 

06
INT
 
 

06
JCXZ
 
 

06
JMP
Jump
 

06
LOOP
 
 

06
LOOPNE
 
 

06
LOOPNZ
 
 

06
LOOPZ
 
 

06
RET
 
 

JMP, jump
转移类型:相对短转移 指令格式:JMP SHORT <PTR> 转移范围:8-bit(-128~127)
转移类型:相对近转移 指令格式:JMP NEAR <PTR> 转移范围:16-bit(-32768~32767)
转移类型:间接绝对近转移 指令格式:JMP NEAR <REG> 转移范围:段内转移,使用在 <REG> 中值替换 IP 的当前指,以进行转移
转移类型:直接绝对远转移 指令格式:JMP <SEGMENT>:<OFFSET> 转移范围:使用 <SEGMENT> 替换 CS 的值,使用 <OFFSET> 替换 IP 的值,以进行转移;
转移类型:间接绝对远转移 指令格式:JMP FAR [ADDRESS] 转移范围:从 [ADDRESS] 中,获取转移地址,并修改 CS 与 IP 的值,以进行转移;
CALL, call procedure
指令的执行过程
1)将当前 IP 入栈,或 CS 和 IP 入栈 2)转移
根据位移进行转移
该转移为段内转移,只修改 IP 内容
指令格式: call <lable>
执行过程: 1)(SP) = (SP – 2), ((SS) * 16 + (SP)) = (IP) 2)(IP) = (IP) + 16-bit offset
此 16-bit offset 为: 1)在编译时[……]

READ MORE

「x86」- 07.String Instructions

内容简介

类别
指令
全称
功能

07
CMPS
 
 

07
LODS
 
 

07
MOVS
Move string
 

07
MOVSB
Move byte string
 

07
MOVSD
Move doubleword string
 

07
MOVSW
Move word string
 

07
REP
Repeat while %cx not zero
 

07
REPNE
Repeat while not equal
 

07
REPNZ
Repeat while not zero
 

07
REPE
Repeat while equal
 

07
REPZ
Repeat while zero
 

07
SCAS
 
 

07
STOS
 
 [……]

READ MORE

「x86」- I/O 指令(I/O Instructions)

IN / OUT – 端口读写指令
IN,从端口读取数据。指令格式:

Instruction
Description

IN AL, DX
 

IN AX, DX
 

IN AL, imm8
 

IN AX, imm8
 

OUT,向端口写入数据。指令格式:

Instruction
Description

OUT imm8, AL
 

OUT imm8, AX
 

OUT DX, AL
 

OUT DX, AX
 

这里比较绕,记忆困难,注意以下事项: 1)写入端口的数据、读出端口的数据,都要放在 AL 或 AX 中(8 bits 端口使用 AL;16 bits 端口使用 AX;) 2)端口号,可以使用 imm8 或 DX(低范围端口[0-255]可以使用 imm8 或 DX,而高范围端口要使用 DX 寄存器)
参考文献
I/O Instructions – x86 Assembly Language Reference Manual[……]

READ MORE

「x86」- 09.Flag Control (EFLAG) Instructions

内容简介

类别
指令
全称
功能

09
CLC
 
 

09
CLD
Clear direction flag
DF = 0

09
CLI
Clear interrupt flag
IF = 0

09
STC
 
 

09
STD
Set direction flag
DF = 1

09
STI
Set interrupt flag
IF = 1[……]

READ MORE

「x86」- 10.Segment Register Instructions

内容简介[……]

READ MORE

「x86」- 杂项指令

CPUID – processor identification
指令:CPUID,用于返回处理器支持的功能信息及特性信息。比如,是否支持温度及电源管理功能、高速缓存的数量、逻辑处理器的数量 等等。 参数:使用 EAX 指定功能号,即要返回的信息,有时需要使用 ECX 寄存器; 返回:在 EAX、EBX、ECX、EDX 中,保存返回信息;
检测处理器是否支持该指令
从 80486 处理器的后期,引入该指令。因此,在使用前,应该先检测处理器是否支持该指令: 1)在 32-bit 处理器上,如果 EFLAGS 的 21 位为 “0”,表示不支持该指令; 2)如果为 “1”,表示支持该指令;
最大功能号
EAX 用于指定功能号,但是不能超过 CPUID 支持的最大功能号。
因此,在使用该指令前,应该使用 0 号功能获取最大功能号:

mov eax, 0
cpuid

并且,0 号功能会在 EBX、ECX、EDX 中保存处理器供应商的信息:

EBX => Genu,“G” 在 BL 中
ECX => inel,“l” 在 CL 中
EDX => ntel,“n” 在 DL 中

对于 Intel 处理器是 GenuineIntel 字符串。
获取处理器品牌信息
如下示例,获取当前处理器的品牌信息,使用 0x80000002-0x80000004 号功能:

mov eax, 0x80000002
cpuid
//
mov eax, 0x80000003
cpuid
//
mov eax, 0x80000004
cpuid
//

当然,在每次执行 cpuid 后,应该将 EAX EBX ECX EDX 内容保存下载(上面的程序没有体现这一点),因为其中存有处理器的品牌信息。
LEA – load effective address
NOP – no operation
UD2 – undefined instruction
XLAT – table lookup translation
XLATB – table lookup translation
参考文献
Miscellaneous Instructions – x86 Assembly Language Reference Manual[……]

READ MORE

「Computer Standards」- 学习笔记

参考文献
Wikipedia/List of computer standards[……]

READ MORE

「ASCII Table」- 整理(ASCII 码表)

控制字符(Control Characters)

Char
OCT
DEC
HEX
Control-Key
Description

NUL
0
0
0
^@
Null character

SOH
1
1
1
^A
Start of heading, = console interrupt

STX
2
2
2
^B
Start of text, maintenance mode on HP console

ETX
3
3
3
^C
End of text

EOT
4
4
4
^D
End of transmission, not the same as ETB

ENQ
5
5
5
^E
Enquiry, goes with ACK; old HP flow control

ACK
6
6
6
^F
Acknowledge, clears ENQ logon hand

BEL
7
7
7
^G
Bell, rings the bell…

BS
10
8
8
^H
Backspace, works on HP terminals/computers

HT
11
9
9
^I
Horizontal tab, move to next tab stop

LF
12
10
a
^J
Line Feed

VT
13
11
b
^K
Vertical tab

FF
14
12
c
^L
Form Feed, page eject[……]

READ MORE

「CRLF」- 回车与换行

回车(Carriage Return)
0x0D
换行(Line Feed)
0x0A
参考文献
回车”(carriage return)和”换行”(line feed)的区别和来历[……]

READ MORE

「字符集」- 概览

内容简介
本文整理了一些常见字符集,并进行了简单介绍。
常见字符集

名称
描述

Unified Hangul Code (UHC)/Extended Wansung/Code Page 949
是韩语的字符集

GB 2312/GB 2312-80
中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称 GB 0,由中国国家标准总局发布,共收录 6763 个汉字。

GBK
汉字内码扩展规范,Chinese Internal Code Specification,是微软对GB2312的扩展,共收入 21886 个汉字和图形符号。

GB18030
国家标准 GB 18030-2005《信息技术中文编码字符集》,共收录汉字70244个。

参考文献
GB2312、GBK、GB18030 这几种字符集的主要区别是什么? Wikipedia/Unified Hangul Code[……]

READ MORE

「Linux」- 识别文件编码、转换文件编码

问题描述
当我们使用编辑器打开文件时,文件有时候会显示为乱码,也就是说编辑器没有使用正确的编码方式打开文件。此时,我们则需要切换编辑器的编码方式,使用正确的编码方式打开文件。
但是,我们应该如何得知文件的正确编码呢?(除了被告知以外)
该笔记将记录:在 Linix 中,如何获取文件的编码方式,以及如何进行文件编码转换。
问题原因
直接获取文件的编码是不太可能的。虽然文件头可能暗示了文件编码(但其实并没有类似的规范),但也有例外。例如,以 0xEF,0xBB,0xBF 开头的可能是 UTF-8 编码文件,但也可能是 ISO-8859-1 编码文件的  字符串。或者,其他的编码体系中的字符。
主流编辑器识别文件编码的方式是通过猜测(即使 file 命令,有时也会给出错误的文件编码提示),所以编辑器里才会由 File Encoding 功能来切换编码的功能。
解决方案:获取文件编码
注意事项: 1)如上所述,工具获取文件编码的方式是通过猜测,因此工具很有可能会返回错误的文件编码,只是可靠的工具返回的结果更加可靠。 2)当工具猜测出编码之后,我们可以尝试使用该编码方式打开文件,以验证猜测结果是正确;
方案一、使用 file 命令
使用 file 命令,可以获取文件编码:

# file Fontconfig_-_fonts.conf.txt
Fontconfig_-_fonts.conf.txt: text/x-zim-wiki, UTF-8 Unicode text

方案二、使用 enca 命令

# apt-get install -y enca

# enca Fontconfig_-_fonts.conf.txt
enca: Cannot determine (or understand) your language preferences.
Please use `-L language’, or `-L none’ if your language is not supported
(only a few multibyte encodings can be recognized then).
Run `enca –list languages’ to get a list of supported languages.

# enca –list language
belarusian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U
bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
czech: ISO-8859[……]

READ MORE

「GB2312」

GB2312简体中文编码表
GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。整个字符集分成94个区,每区有94个位。

GB2312,又称为GB0,由中国国家标准总局发布,1981年5月1日实施
GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个
GB2312是一种区位码。分为94个区(01-94),每区94个字符(01-94)
01-09区为特殊符号
10-15区没有编码
16-55区为一级汉字,按拼音排序,共3755个
56-87区为二级汉字,按部首/笔画排序,共3008个
88-94区没有编码
GB2312只是编码表,在计算机中通常都是用”EUC-CN”表示法,即在每个区位加上0xA0来表示。区和位分别占用一个字节。

GB2312汉字编码字符集对照表
第01区 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A1A0 、 。 ・ ˉ ˇ ¨ 〃 々 ― ~ ‖ … ‘ ’ A1B0 “ ” 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】 A1C0 ± × ÷ ∶ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠ A1D0 ⌒ ⊙ ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯ ≤ ≥ ∞ ∵ A1E0 ∴ ♂ ♀ ° ′ ″ ℃ $ ¤ ¢ £ ‰ § № ☆ ★ A1F0 ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※ → ← ↑ ↓ 〓
第02区 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A2A0 A2B0 ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ A2C0 ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ A2D0 ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③ ④ ⑤ ⑥ ⑦ A2E0 ⑧ ⑨ ⑩ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ A2F0 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ
第03区 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A3A0 ! " # ¥ % & ' ( ) * + , - . / A3B0 0 1 2 3 4 5 6 7 8 9 : ; < = > ? A3C0 @ A B C D E F G H I J K L M N O A3D0 P Q R S T U V W X Y Z [ \ ] ^ _ A3E0 ` a b c d e f g[……]

READ MORE

「Sparse File」- 稀疏文件

解决方案
与常规文件的创建方式不同,当创建 Sparse-File 时: 1)不会将组成块的实际字节写入磁盘, 2)而是在元数据中记录文件大小,并将元数据写入磁盘。 3)当向文件写入数据时,才会分配实际的数据块。 4)当读取稀疏文件时,文件系统透明地将表示空块的元数据转换为在运行时填充 NULL 字节的“真实”块;
所以,能否使用 Sparse-File 取决于文件系统是否支持。

常用操作
判断稀疏文件
archlinux/Sparse file Finding sparse files?

# 通过 find 判断文件是否为稀疏文件
# 最左边一列(%S)显示的值是(BLOCK-SIZE * st_blocks / st_size),在稀疏文件的情况下通常小于 1.0

# find /var/lib/libvirt/images f -printf “%S\t%p\n”
0.217076 ./cnicd-02.qcow2
0.152867 ./cnicd-01.qcow2
0.925253 ./ci-node-01.qcow2
1 ./develop.qcow2
0.48236 ./cluster-08.qcow2
0.100322 ./develop-235.qcow2
1 ./develop-354.qcow2

# ls shows the gray+green areas, the logical length of the file.
# du (without –apparent-size) shows only the green areas, since those are the ones that take up space.

# ls -lh cnicd-01.qcow2
-rw——- 1 libvirt-qemu kvm 101G Mar 30 02:24 cnicd-01.qcow2

# du -h cnicd-01.qcow2
16G cnicd-01.qcow2

# stat -c ‘%b*%B-%s’ — “$file” # 或使用 stat 命令

创建稀疏文件

# dd count=0 bs=1M seek=100 of=/path/to/myfile

复制稀疏文件
方法还是由很多的,性能可能会有所差异,使用场景以有些不一样的地方:「What is fastest way to copy[……]

READ MORE

「LICENSE」- 开源许可协议

常用的开源协议
哪些开源协议 可以商用 – 简书 哪些开源协议可以商用_cnhome的专栏-CSDN博客_apache协议可以商用吗
Apache License 2.0 要点:Apache Licence 是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。但要保留原有的license。
BSD开源协议(Berkerley Software Distribution) 要点:商业软件可以使用,也可以修改使用BSD协议的代码。
GPL(GNU General Public License) 要点:商业软件不能使用GPL协议的代码。
LGPL(GNU Library or “Lesser” General Public License) 要点:商业软件可以使用,但不能修改LGPL协议的代码。
MIT(MIT license) 要点:商业软件可以使用,也可以修改MIT协议的代码,甚至可以出售MIT协议的代码。
MPL(Mozilla Public License 1.1) 要点:商业软件可以使用,也可以修改MPL协议的代码,但修改后的代码版权归软件的发起者。
CDDL(Common Development and Distribution License) 要点:商业软件可以使用,也可以修改CDDL协议的代码。
EPL(Eclipse Public License 1.0) 要点:商业软件可以使用,也可以修改EPL协议的代码,但要承担代码产生的侵权责任。
最后总结 从上面的总结看出来,常用的开源软件协议中,只有GPL许可证的开源软件是不能作为商业用途的,其他虽然有限制但是也是可以的。
GPL,General Public License,通用性公开许可证
Wiki: https://en.wikipedia.org/wiki/GNU_General_Public_License
介绍:https://www.oschina.net/question/12_2826
APACHE LICENSE
内容:关于APACHE LICENSE。
Homepage: http://www.apache.org/licenses/
APACHE LICENSE, VERSION 2.0:http://www.apache.org/licenses/LICENSE-2.0[……]

READ MORE

「Memory Map (x86)」

相关链接
Memory Map (x86) – OSDev Wiki[……]

READ MORE

「计算机」- 原码、反码、补码(学习笔记)

我们采用十进制,机器采用二进制。十进制与二进制可以相互转换,十进制的 0-255 与二进制的 00000000-11111111 对应。
但是现在出现个问题:我们的十进制是有负数的,那如何在机器中使用二进制表示负数呢?
对于这个问题,有以下几种方案:
原码(Original code)
将最高位视为符号位,即正数该位为 0,负数该位为 1(此时零有两种表示:+0 和 -0) 其余位表示数值的大小。
原码表示法示例: 00000010 = +2,00000011 = +3 10000010 = -2,10000011 = -3
使用原码的优点: 1)简单直观 比如 +11 的原码为 00001011,-11 的原码就是 10001011,只需修改首位。
使用原码的缺点: 1)无法直接参与计算 例如 (+11) + (-11) = 0,但是 (00001011) + (10001011) != 0,如要处理这个问题,则硬件需要特殊设计,这就增加复杂性。
反码(Inverse code)
正数的反码是:与原码相同; 负数的反码是:对正数的原码逐位取反;(或者对负数的原码逐位取反,但最高位为壹;)
反码表示法示例: +12 的反码为 00001100 -12 的反码为 11110011
使用反码的缺点: 1)无法直接参与计算 例如:3 是正数,原码为 0011,反码为 0011;-3 原码是 1011,-3 反码是 1100;两数相加,依旧无法得零;
补码(Complement code)
正数的补码是:与原码相同; 负数的补码是:对正数的原码逐位取反,再加壹
补码表示法示例: +12 的补码为 00001100 -12 的补码为 11110100
使用补码的优点: 1)将符号位和数值域统一处理 2)加法和减法也可以统一处理
附加说明
这是种负数的表示法,而不是说补码 10000001 通过进制转化可以得到 -127,我们只是定义 -127 在计算机中用 10000001 来表示。
参考文献
On the Primitive Code, Inverse Code, Complement Code and Shift Code of Operating System 百度百科/补码[……]

READ MORE

「Partition table」- 分区表

Disk Label
每个磁盘都有个“特殊区域”被留出来,用于存储有关磁盘控制器、几何、切片的信息,该信息被称为 Disk Lable(磁盘标签,或 VTOC,Volume Table of Contents)。
“标记”一个磁盘意味着将切片信息写入磁盘。通常在更改切片后,进行“标记”磁盘。如果在创建切片后,未能“标记”磁盘,则切片将不可用,因为操作系统无法了解切片的信息。
Partition Table
而 Disk Label 的重要部分是 Partition Table(分区表),它标识磁盘的切片,切片边界(柱面),切片的总大小。可以使用某些程序来显示磁盘的分区表。
Partition Table 是个由操作系统(在磁盘上)维护的表,用于描述该磁盘上的分区。「分区表」记录磁盘的分区信息。
注意事项: 1)有的时候 Disk Label 与 Partition Table 区分的并不是特别清楚。一般都是指的同一个东西,除非特别说明。
Partition Label
注意与 Partition Label(分区标签)区分,Partition Lable 是文件系统的概念,需要与特定的文件系统工具来修改。
常见分区表类型
MBR – Master Boot Record APM – Apple Partition Map GPT – GUID Partition Table BSD – BSD disklabel
EBR – Extended Boot Record RDB – Rigid Disk Block BEER – Boot Engineering Extension Record
参考文献
Wikipedia/Partition table System Administration Guide: Basic Administration/About Disk Labels GNU Parted/manual/2.4.4 mklabel partition – What is the difference between a name and a label in gparted? – Unix & Linux Stack Exchange partition – What does disk label mean? – Unix & Linux Stack Exchange[……]

READ MORE

「GPT」- GUID Partition Table

参考文献
Wikipedia/GUID Partition Table 百度百科/GPT GUID分区表简介 Should I use fdisk for partitioning or GPT aware tools?[……]

READ MORE

「MBR」- 主引导记录(Master Boot Record)

什么是“主引导记录”?
主引导记录(MBR),(1)是壹段信息,(2)保存在磁盘的第壹个扇区中,(3)大小为512字节。
作用:(1)保存引导代码,用于启动操作系统;(2)保存磁盘分区信息
注意:磁盘也可以没有主引导记录。此时(1)磁盘是“整个分区”,不存在分区(因为分区信息保存在主引导记录中)。(2)只能用于保存无据,无法安装操作系统(因为引导程序保存在主引导记录中)
主引导记录的数据结构

大小:512 BYTE
组成:(1)0-445,引导程序;(2)4×16=64,分区表;(3)510-511,AA55(幻数);
分区表数据结构
Status,1 bytes,分区状态,是否可用于启动; Start,3 bytes,在分区中起初的绝对扇区的CHS地址; Partition Type,1 byte,分区类型; End,3 bytes,在分区中最终的绝对扇区的CHS地址; LBA,4 bytes,在分区中起初的绝对扇区的LBA; Partition Length,4 bytes,在分区中的扇区数;
在MBR中,分区表的组织限制了一个磁盘最大可寻址空间为「2TiB」。「MBR」不在分区中,它在第一个分区之前。
在MBR中,通常最多只能有四个主分区。某些操作系统和工具可以扩展到五个、八个、十六个,但是我们不讨论这些情况。
经典通用MBR结构
下面是经典通用MBR结构:

DEC
Description
Size (bytes)

0 – 445
Bootstrap code area
446

446 – 461
Partition entry No.1
16

462 – 477
Partition entry No.2
16

478 – 493
Partition entry No.3
16

494 – 509
Partition entry No.4
16

510 – 511
Boot signature
2

而「现代标准MBR结构」与「经典通用MBR结构」整体结构是类似的,因此这里不对「现代标准MBR结构」进行描述。
由「Bootstrap code area」与「Boot signature」都不是我现在想关心的地方,所以都跳过。我们来看看「Partition ent[……]

READ MORE

「Linux」- 性能优化(工具箱)

http://www.brendangregg.com/Perf/linux_perf_tools_full.png

常用工具
# TODO 在Linux下的终端中使用的系统资源监控工具;
DTrace – a performance analysis and troubleshooting tool http://dtrace.org/blogs/about/
atop / top / ps / lsof / nmon
htop – 交互式的进程查看器。Homepage: http://hisham.hm/htop/
硬盘 I/O 监控
5 TOOLS FOR MONITORING DISK ACTIVITY IN LINUX
iotop,可用于监控系统进程或者线程的 IO 信息。支持监控指定的进程或者用户。
iostat,查看CPU统计数据,以及每个存储设备的IO统计数据。
ioping,实时监控磁盘的I/O延迟。ioping的主要思想是类似于ping命令,它以显示网络延迟相同的方式来显示磁盘I/O延迟。
dstat,用于生成多个系统资源的统计数据的多功能工具。比如CPU、内存、网络、电池、风扇等等,其中也支持硬盘的统计数据。
ATop,类似于top(1)命令,该命令也能够显示磁盘的I/O信息。[……]

READ MORE

「Linux Audit」

Audit / https://people.redhat.com/sgrubb/audit/ GitHub/linux-audit/audit-userspace linux-audit/audit-documentation: Documentation and specifications stevegrubb/audit-explorer: This is an R shiny app that visualizes audit data using many tools all in one app.[……]

READ MORE

「nil」- SystemTap

内容简介[……]

READ MORE