4.1.1程序员的可见的状态 ———— Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示. 1.程序寄存器(Program registers): %eax, %ecx, %edx, %ebx, %esi,%edi, %esp和%ebp.都是32位的. 2.条件码(Condition codes): ZF(零标志), SF(符号标志), OF(溢出标志).用来保存最近的算术或逻辑指令造成的影响. 3.程序计数器(PC):存放当前正在执行的地址. 4.存储器(Me…
关于who 功能说明:显示目前登入系统的用户信息. 语 法:who [-Himqsw][--help][--version][am i][记录文件] 补充说明:执行这项指令可得知目前有那些用户登入系统,单独执行who指令会列出登入帐号,使用的 终端机,登入时间以及从何处登入或正在使用哪个X显示器. 参 数: -H或--heading 显示各栏位的标题信息列. -i或-u或--idle 显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何…
getenv函数 1.获得环境变量值的函数 2.参数是环境变量名name,例如"HOME"或者"PATH".如果环境变量存在,那么getenv函数会返回环境变量值,即value的首地址:如果环境变量不存在,那么getenv函数返回NULL setenv函数 1.修改或添加环境变量的函数 2.将name设置成value   1.如果name在环境中不存在,那么很好办,在环境中添加这个新的变量就OK. setenv函数必须在environment list中增加一个新的…
第十章.程序间的交互和通信 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程.输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 输入:从I/O拷贝到主存,输出:从主存拷贝到I/O Unix IO(系统级IO)虽然是低级别的,但是了解它有助于理解其他的系统概念:而且有时候你只能使用Unix IO,比如网络编程. Unix中所有的IO都被模型化为文件,输入输出则用读写文件来操作. 10.1 Unix I/O 一个Unix文件就是一个M个字节的序列:B0,B1,.…
6.存储器层次结构 6.1存储技术 1.如果你的程序需要的数据是存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们.如果存储在高速缓冲中,需要1-10个周期.如果存储在主存中,需要50-100个周期.如果存储在磁盘上,需要约20000000个周期. 2.随机访问存储器(RAM,Random-access memory)分为两类-静态和动态的.静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多.SRAM用来作为高速缓存存储器,即可以在CPU芯片上,也可以不在CPU芯片上…
通过使用标准的字符码能够对文档中的字母和符号进行编码. 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 溢出:计算机的表示法是用有限数量的位来为一个数字编码,因此当结果太大就会导致某些运算溢出. 整数和浮点数会有不同的数学属性是因为:处理数字表示有限性的方法不同: 整数:编码相对较小的数值范围,但精确度高 浮点数:编码较…
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.可执行程序是怎么得来的? 编译器预处理(负责把include的文件包含进来及宏替换等工作):编译成汇编代码:编译器编译成目标代码:再链接成可执行文件:操作系统加载到内存中来执行 hello.o和hello文件都是ELF格式的 二.目标文件的格式(ELF可执行可链接) ABI(应用程序二进制接口) 可重定位主要是.o文件 可执行文件加载的主…
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调用堆栈.中断. 两把宝剑:中断上下文和进程上下文切换. 内核启动相关代码基本都在init目录下. Linux内核的核心代码在kernel目录中. -S:在CPU开始运行之前将其冻结: -s:如果不想使用1234端口,泽可以使用-gdb tcp:xxxx来代替. 重点理解相关目录内容 arch/ 该目录中包含和…
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态.而在相应的低级别执行状态下,代码的掌控范围会受到限制.只能在对应级别允许的范围内活动.从而保证真个系统更稳定. 2.Intel x86的CPU有四种不同执行级别0-3,Linux只使用其中的0和3来分别表示内核态和用户态. 3.Cs寄存器的…
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理解:计算机就是通过和用户进行交互,执行用户的指令,这些指令存放在内存中,通过寄存器存储,堆栈变化,来一步步顺序执行. 一.存储程序计算机工作模型 1.冯诺依曼体系结构-存储程序计算机 硬件角度(主板):通过cpu中IP寄存器指向一个代码段运行某些指令: 寄存区,指向内存的某一块区域(代码段) IP:16位cp…
Linux中命令格式为: command [options选项] [arguments参数] //中括号代表是可选的,即有些命令不需要选项也不需要参数 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略 cheat命令提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能. find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个Everything工具和locate类似). grep 可以对文件全文检…
第十二章并发编程 1.如果逻辑控制流在时间上重叠,那么它们就是并发的.这种现象,称为并发(concurrency). 2.为了允许服务器同时为大量客户端服务,比较好的方法是:创建并发服务器,为每个客户端创建各自独立的逻辑流.现代OS提供的常用构造并发的方法有: 进程和线程. 1)每个逻辑流都是一个进程,由内核来调度维护.每个进程都有独立的虚拟地址空间,控制流通过IPC机制来进行通信. 2)线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一进程的虚拟地址空间. 由于进程控制和IPC的开…
第三章 程序的机器级表示 3.1历史观点 Intel处理器的换代:8086——80286——i386——i486——Pentium——PentiumPro——PentiumII——PentiumIII——Pentium4——Pentium4E——Core2——Corei7. 这些所有的代都是Intel系列的,Intel系列本身有很多名字,比如x86,比如IA32,Intel系列中64位扩展称为x86-64.最常用的是x86.也就是说x86就是Intel每一代处理器的统称. 8086和80286的…
Linux系统中的一切都是文件,命令就是命令文件. 命令执行分为4步: 1.路径+命令名称. 2.别名.可用alias命令创建别名. 3.内部命令. 4.外部命令.99%的情况都属于第四种.定义这些路径的变量为PATH. export命令可将一般变量提升为全局变量. Vim文本编辑器的优势:1.多数Linux系统通用.2.易掌握. Vim编辑器有3种模式: 命令模式:对文件进行复制.粘贴.剪切.删除等操作,作为输入模式与末行模式切换的桥梁. 输入模式:编辑文件内容. 末行模式:保存或退出文档.…
第五周课下测试(ch03)补交 1.( 多选题 | 1 分) 有关gdb调试汇编,下面说法正确的是() A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 print /x $rax C . 可以用info registers查看所有寄存器的值 D . 可以用info frame 查看所有栈帧的信息 E . 可以使用up,down切换栈帧 ABCE 书P194 A:disas 反汇编当前函数 B:print /x $rax 以十六进制输出%rax的内容 C:…
Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和time-asm命令 1. 克隆并自动编译MenuOS rm menu -rf 强制删除原menu文件 git clone http://github.com/mengning/menu.git 从github中克隆 2. test.c…
第五周总结&实验报告三 实验报告 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) ① 统计该字符串中字母s出现的次数. ② 统计该字符串中子串"is"出现的次数. ③ 统计该字符串中单词"is"出现的次数. ④ 实现该字符串的倒序输出. ① 统计该字符串中字母s出现的次数. package test3; public class Zifu { public static v…
第五周 给MenuOS增加time和time-asm命令 更新menu代码到最新版 在main函数中增加MenuConfig 增加对应的Time函数和TimeAsm函数 make rootfs 使用gdb跟踪系统调用内核函数sys_time 一直按n单步执行会进入schedule函数 sys_time返回后进入汇编代码处理gdb无法继续跟踪 执行int 0x80之后执行system_call对应的代码 系统调用在内核代码中的处理过程 1.系统调用在内核代码中的工作机制和初始化 2.系统调用机制的…
第五周总结 一.继承       1.类的继承格式 class 父类{} class 子类 extends 父类{} 2.扩展类的功能 class 父类{ 父类属性: .......... .......... } class 子类 extends 父类{ 新定义属性: ........... ........... 注意:只允许多层继承不能多重继承,(即一个子类只能继承一个父类,一个父类还可以有一个父类) 子类不能直接访问父类的私有操作 二.方法的覆写 概念:指子类定义了与父类中同名的方法(被…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 一.学习内容 (一)给MenuOS增加time和time-asm命令(详见 :二.实验内容) 四步 1.更新menu代码到最新版: 2.在main函数中增加MenuConfig: 3.增加对应的Time函数和TimeAsm函数: 4.make rootfs. (二)使用gdb跟踪系统调用内核函数sys_time(详见 :二.实…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角度讲述这个星期的学习内容.第一个角度知道自己在干什么,这周主要内容就是在menu菜单中添加两个自己的功能,也就是上周我们编辑的两个函数,如何实现就是在test.c也就是make中编译的文件中添加两个函数,然后就进行编译,实现了功能,然后进行gdb调试,可以看出这个代码的变化情况.第二个角度,为什么做这个,知道…
姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一个系统调用内核函数 1:克隆并自动编译MenuOS a .强制删除menu (rm menu -rf) b. 更新menu代码至最新版本(git clone https://github.com/mengning/menu.git) c. rm menu -rf 强制删除原menu文件 d. make rootfs 运行自动编…
作者:黎静 一.知识点总结 (一)给MenuOS增加time和time-asm命令 1.更新menu代码到最新版 2.test.c中main函数里,增加MenuConfig() 3.增加对应的两个函数,Time和TimeAsm函数 4.make rootfs自动编译脚本 (二)使用gdb调试跟踪系统调用内核函数sys_time 为处理time函数的系统调用systime设置断点之后,在menuOS中执行time.发现系统停在systime处.继续按n单步执行,会进入schedule函数. sys…
实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 1.实验目的与要求 (1) 掌握Java应用程序的打包操作: Java程序的打包,程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以双击图标运行. .jar文件(java归档)既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件. JAR文件是压缩的,它使用zip压缩格式. Jar命令选项: c 创建一个新的或者空的存档文件,并加入文件. C 暂时改变到指定的目录 e 在清单文件中…
区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换. RUNTIME模式:当前生效,重启失效:PERMANENT模式:当前不生效,重启生效. 命令行中默认为RUNTIME模式,考试时需要用上PERMANENT模式并记得重启防火墙. Linux系统中的一切都是文件,部署一个服务就是在修改配置文件,修改过后记得重启一下,顺手加入到开机启动项中. 考试时若没有需要拒绝的流量可设置成放行所有. iptabl…
部署LVM三步: 1.pv:使设备支持LVM: 2.vg:对支持LVM的设备进行整合: 3.lv:将整合的空间进行切割. 每个基本单元PE的大小为4M,分配空间必须是4M的整数倍.可以容量或基本单元个数为单位. xfs不支持LVM,扩容命令为xfs_growfs,不支持缩小. 缩小LVM可能造成数据丢失,需备份. 修改网络配置有以下4种方法(由繁至简): 1.修改网卡配置文件: 2.nmtui命令: 3.nm-connection-editor命令: 4.右上角菜单可修改.关闭和开启网卡. ip…
RHEL7用户身份有以下这些: 1.管理员 root UID:0 权限最大: 2.系统用户 UID:1-999: 3.普通用户 UID:1000+. 一个用户基本组只有一个,扩展组可多个,创建扩展组用groupadd,将用户加入扩展组用usermod -G 组名 用户名. userdel -r 用户名,同时删除用户家目录,较彻底. ls -l 文件或目录名,可查看文件或目录权限. chown (-R) 所有者:所有组 文件名,设置文件或目录所有者与所有组. chmod (-R) 权限 文件名,设…
if条件测试语句可以让脚本根据实际情况自动执行相应的命令,可以分为单分支.双分支与多分支. /dev/null为无回收功能的垃圾箱. read是用来读取用户输入信息的命令,-p用来显示提示信息. for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理.原题中曾经考过. while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标.有范围的使用场景.while循环语句通过判断条件测试的真假来决定是…
touch命令可修改文件atime和mtime,不能修改ctime.可用于修改文件后将修改时间改回之前修改时间. mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”.加上参数-p可创建多级目录. cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”.加上-r或-a可复制目录. mv命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”. rm命令用于删除文件或目录,格式为“rm [选项] 文件”. dd命令用于按照指定大小…
教材内容总结 1.String类和StringBuffer类都覆盖了toString方法,都是返回字符串. 所以带不带toString效果是一样的. 2.instanceOf运算符可以用来判断某个对象是否是由某个类创建的,左操作数是对象,右操作数是类.这里其实类似于之前的从右向左判断的例子.所以不一定需要实例化才能返回true. 3.类要操作接口一定要使用implements关键字,对接口的两种定义方式分别是操作接口中的定义方法和将该方法标识为abstract. 4.Java中只能继承一个父类别…