计算机组成 -- 提升性能
CPU的功耗12CPU time = 时钟周期时间(Clock Cycle Time) × CPU时钟周期数(CPU Cycles) = 时钟周期时间(Clock Cycle Time) × 指令数 × 每条指令的平均周期数(Cycles Per Instruction,CPI) 80年代开始,CPU硬件工程师主要着力提升CPU主频,到功耗是CPU的人体极限 CPU,一般被叫做超大规模集成电路,这些电路,实际上都是一个个晶体管组合而成的 CPU计算,实际上是让晶体管里面的『开关』不断地去打开或关闭,来组合完成各种运算和功能 如果要计算得快,有两个方向:增加密度(7nm制程)、提升主频,但这两者都会增加功耗,带来耗电和散热的问题 密度 -> 晶体管数量 主频 -> 开关频率 如果功耗增加太多,会导致CPU散热跟不上,此时就需要降低电压(低压版CPU) 1功耗 ≈ 1/2 × 负载电容 × 电压的平方 × 开关频率 × 晶体管数量 并行优化 – 阿姆达尔定律1优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间 其它 加速大概率事...
计算机组成 -- 性能
性能指标 响应时间(Response time)、执行时间(Execution time) 执行一个程序,需要花多少时间 吞吐率(Throughput)、带宽(Bandwidth) 单位时间范围内,能处理多少数据或执行多少指令,可以通过多核、集群等方式来提升吞吐率 性能 = 1/响应时间 CPU时钟 time命令 real time Wall Clock Time/Elapsed Time,运行程序整个过程中流逝掉的时间 user time 在用户态运行指令的时间 sys time 在操作系统内核里运行指令的时间 程序实际花费的CPU执行时间:CPU time = user time + sys time 程序实际占用的CPU time一般比Elapsed Time少(单核情况下) 123456$ time seq 1000000 | wc -l1000000real 0m0.024suser 0m0.018ssys 0m0.005s 程序实际花了0.024s,CPU time只有0.018s+0.005s=0...
计算机组成 -- First Draft
从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中 参考资料深入浅出计算机组成原理
计算机组成 -- 知识地图
参考资料深入浅出计算机组成原理
Linux使用 -- awk
awk sed awk更像是脚本语言 awk:用于比较规范的文本处理,用于统计数量并输出指定字段 sed:用于将不规范的文本,处理为比较规范的文本 控制流程 输入数据前例程**BEGIN{}** 主输入循环**{}** 所有文件读取完成例程**END{}** 记录和字段 每行称为AWK的记录 使用分隔符(可以自定义,默认是空格和制表符)分隔开的单词称为字段 字段的引用 $1 $2 ... $n:表示每一个字段 -F:自定义分隔符,可以使用正则表达式 1234567[root@localhost ~]# awk -F"'" '/^menu/{print $2}' /boot/grub2/grub.cfgCentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-6a299ef164734d338007f5e88cee6be0) 7 (Core)[root@localhost ~]# awk...
Linux使用 -- sed
sed awk sed:一般用于对文本内容做替换 awk:一般用于对文本内容进行统计、按需要的格式进行输出 替换指令模式空间 将文件以行为单位读取到内存(模式空间) 使用sed的每个脚本对该行进行操作 处理完成后输出该行 替换命令s123sed 's/old/new/' filenamesed -e 's/old/new/' -e 's/old/new/' filename ...sed -i 's/old/new/' 's/old/new/' filename ... 带正则表达式的替换命令s 12sed 's/正则表达式/new/' filenamesed -r 's/扩展正则表达式(+、?、|)/new/' filename 样例基本使用12345678910111213141516[root@localhost ~]# echo a a a > afile[root@localhost ~]# sed 's/a/aa/' ...
Linux使用 -- 元字符
元字符 .:匹配除换行符外的任意单个字符 *:匹配任意一个跟在它前面的字符 作为通配符(*、?)时是可以单独使用的,但作为元字符时必须与前面的字符一起使用 []:匹配方括号中字符类中的任意一个 ^:匹配开头 $:匹配结尾 \:转义后面的特殊字符 扩展元字符 +:匹配前面的正则表达式出现至少一次 ?:匹配前面的正则表达式出现零次或一次 |:匹配它前面或后面的正则表达式 grep12345678910111213141516171819202122232425262728293031323334353637[root@localhost ~]# grep password /root/anaconda-ks.cfg# Root password[root@localhost ~]# grep pass.... /root/anaconda-ks.cfgauth --enableshadow --passalgo=sha512# Root password[root@localhost ~]# grep pass....$ /root/anaconda-ks.cfg# Root password[...
Linux使用 -- 脚本控制
优先级控制 使用nice和renice来调整脚本优先级 避免出现不可控的死循环(导致CPU占用过高或死机) Fork炸弹123456789101112131415161718# 大部分限制对root无效[root@localhost ~]# ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 3795max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POS...
Linux使用 -- Shell
转义 + 引用 特殊字符 一个字符不仅有字面意义,还有元意(meta-meaning) 如# ; \ " ' 转义 \n \r \t \$ \" \\ 引用 ":不完全引用,解析里面的变量 ':完全引用,不做任何解析 `:运行命令 12345678[root@localhost ~]# echo "$a"[root@localhost ~]# echo "\$a"$a[root@localhost ~]# echo " abc"x"edf " abcxedf[root@localhost ~]# echo " abc\"x\"edf " abc"x"edf 12345[root@localhost ~]# var1=123[root@localhost ~]# echo "$var1"123[root@localhost ~]# echo '$var'$...
Linux使用 -- 变量
命名规则 字母、数字、下划线 不以字母开头 赋值 基本概念 Shell变量是弱类型的变量 方式 变量名=变量值 a=123,等号左右不能出现空格 使用let为变量赋值 let a=10+20,Shell是解释性语言,尽量不要进行运算 将命令赋值给变量 l=ls 将命令结果赋值给变量,使用$()或者`` letc=$(ls -l /etc) 变量值有空格等特殊字符可以包含在""或者''中 a='hello world' 1234567[root@localhost ~]# a=123[root@localhost ~]# a =123-bash: a: 未找到命令[root@localhost ~]# a = 123-bash: a: 未找到命令[root@localhost ~]# a= 123-bash: 123: 未找到命令 123[root@localhost ~]# l=ls[root@localhost ~]# $lanaconda-ks.cfg a.sh a.txt b.txt comb...














