操作系统启动复习
MIPS全流程图(框选为流程中谁占有CPU)
文字注解GPT解释
BootLoader解释一BootLoader是Booter和Loader的合写:Booter要初始化系统硬件使之运行起来,至少是部分运行起来。Loader将操作系统映像加载到内存中,并跳转到操作系统的代码运行。
解释二BootLoader都分为stage1和stage2两大部分:
依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现;
stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性;
将内核加载到内存也是在这一阶段完成的。我们见到的U-Boot就是BootLoader的具体一种。
引导操作系统(Linux)这一部分对应流程图中第二个方框,在BootLoader加载内核镜像到内存后,控制权交给操作系统,Bootloader结束工作,操作系统开始进行自初始化。
具体流程一阶段
二阶段
总结经历过流程图中的启动,在mips上的启动就已经完全完成了。
X86全流程图
文字注解GPT解释GPT这里有点问题,就是BootLoader的位置,详情看注 ...
操作系统引论复习
操作系统定义OS课程定义操作系统是一组管理计算机硬件资源的软件集合,它向计算机程序提供共性的服务。
王道定义操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理的组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。
区别最大的区别在于OS课程没有强调操作系统同时管理软件资源,软硬件资源合称计算机资源软件资源指为方便使用计算机和提高使用效率而组织的程序以及用于开发、使用和维护的有关文档。软件系统可分为系统软件和应用软件两大类资源。
操作系统定位
操作系统是计算机系统中最基本的系统软件,也就是它的本质仍为软件。
操作系统管理硬件、为上层提供统一接口从而方便使用、并提供保护(内核态)。
操作系统特征并发,共享,虚拟,异步。并发指的是宏观上两个或多个事件在同一时间间隔内发生,实际上,对于单CPU环境,每一时刻只能有一个程序执行。但在宏观上好像在同时执行,称为并发。并行指的是在每一时刻都有两个或多个事件在同时发生,这是真正的同时进行。把在一段时间内只允许一个进程访问的资源称为临界资源。
操作系统功能计算机系统资源的管理者
处理机管理
存储器管理
设 ...
Manacher算法
这个算法应用在日常中还是比较常见使用的,但不知道为什么很少人讲这个算法,至少在我的身边是这样。
问题引入给定如下序列,求其最长回文子串的长度
$${\rm{a}}baccabd$$
没错,Manacher就是解决这种最长回文字串的问题,其时间复杂度为O(n)。暴力解法时间复杂度为O(n^2)。双指针解法时间复杂度为O(n^2)。动态规划解法时间复杂度为O(n^2)。现在知道选谁了吧(
算法学习处理输入解释说明先看两个回文串的例子:
$$aabbaa$$
这个回文串的中心位置在两个B的中间,我们叫它虚对称轴。
$$aabaa$$
这个回文串的中心位置在B,我们叫它实对称轴。在任何给定的回文串中,都可能会出现这两种情况,处理第二种情况显然是比较轻松的。第一种则比较复杂,那么为了处理方便,我们可以把任意给定的字符串的虚对称轴实化:
$$a*a*b*a*a$$
即用一个符号显式表示出虚对称轴,这样,我们就将第一种情况归一化到了第二种情况,处理时候只处理第二种情况即可。需要注意,我们在两个字符之间插入“*”会导致字符串整体扩大2倍,所以最后的答案要/2。
代码演示123456789publi ...
贝叶斯估计
这是北航由刘雪峰老师讲授的信号处理与信息推断课程,本人根据老师PPT在期末复习时总结如下,如有侵权,立刻删除。在这里也鼓励计算机学院的大家去选这门课,真的对人生很有帮助。
前置知识信息推断信息推断是指从观察到的现象、推测出现象背后隐藏的信息。即从表象推本质,这显然是很难做到准确的,因为内因与外在不是一一对应的,且千人千面。
错误的信息推断黑白思维定义一件事情发生的原因只有一个,而且是我认为的那个,在此期间我只会找能加强我认为的原因的证据来确信想法。
问题
事情发生的原因不止一个
证据是没有用的,你只找加强你自信心的证据
较好的信息推断概率思维定义找到一件事情背后尽可能的原因,搜集尽可能的数据,来给原因给予概率,找最大的原因作为最终的原因。
好处
不会遗漏原因
证据有用,用来调整概率
信息量大(搜集了全面的证据)
最大似然估计定义对于一件事情列举所有可能的原因,找到每一个原因产生该事实的概率,选择概率最大的原因作为结论,即最有可能产生该现象的原因。
地位这是概率思维的具体体现
特点
好处自然是概率思维的好处
缺陷:忽略了这个原因本身发生的可能性,可能会导致结论出错。
举例坐在飞 ...
CPU扩展设计——分支预测
写在开头本文为笔者学习《超标量处理器设计》的一些理解,请学习时结合本书食用~超标量处理器设计分享
概述考虑我们在计组设计中未曾考虑的问题:如果跳转指令成功跳转,选择默认不跳转的我们需要清空流水线前面的指令,这种清空被称为跳转惩罚。但由于我们的设计是五层流水线,跳转级在第二级,我们只需要引入延迟槽,便不需要清空流水线前面的指令,使得这个问题得到了解决。
但现代CPU设计具有以下的特点:
流水线的深度往往较深,可以达到十几级,一次清空就要被浪费掉许多条指令。
流水线的设计采用超标量设计,一次取指取到大于等于两条指令。
处理器高并行。
这样的特点导致了这种惩罚已经不是可以通过延迟槽避免的了,并且单次惩罚损失10+条指令。
并且在现代编程中,if,for,while这些语句的出现并不稀奇,所以这种频繁的惩罚是我们不能接受的,我们就需要对跳转进行尽力的预测,让CPU的实际运行尽力接近于我们的预测,这就引入了今天的设计——分支预测。
预测内容方向我们需要预测现在摆在我们面前的这条分支语句会不会发生跳转。
目标地址我们需要预测现在摆在我们面前的这条分支语句如果真跳了,会跳到哪里?这里可能有一个 ...
Unix 记忆留存 (三)
这是该系列第三篇,也是最后一篇
前言本篇博客是笔者在学习Unix课程时所积累的学习笔记。希望对后来学习Unix的友友复习准备Unix的期末考试有帮助。
系统调用文件I/O引言基本文件I/O函数:open、creat、read、write、lseek、close术语:不带缓冲的I/O(指每一个read、write都调用内核中的一个系统调用),低级例程。
文件描述符一个非负的整数,一个结构数组的下标,进程打开的文件表项的下标。open、creat函数会返回一个文件描述符文件描述符0、1、2默认打开,分别对应于标准输入(键盘)、标准输出(显示器)、标准错误输出(显示器)文件。在unistd.h中定义为STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO
函数介绍open#include <fcntl.h>int open(const char *pathname, int oflag, [mode_t mode])返回值:若成功,返回非负整数,即文件描述符。一定是当前“进程文件描述符表”中最小未使用的描述符。出错返回-1。pathname:常量,文件 ...
Unix 记忆留存 (二)
这是该系列第二篇。
前言本篇博客是笔者在学习Unix课程时所积累的学习笔记。希望对后来学习Unix的友友复习准备Unix的期末考试有帮助。
UNIX体系结构
Shell编程意义1.将一些有用的命令组合变成实用工具。例如:12345ls -l | sed -n '/^d/p' //显示当前目录下的子目录$ vi lsdir //用vi打开lsdir$ sh lsdir //执行lsdir脚本$ chmod +x lsdir //为lsdir赋予执行权限$ PATH=$HOME/bin:$PATH //修改路径2.快速编写一些实用的软件例如写一个自己的cat命令:1234$ vi mycat //用vi打开mycat文件awk '{print NR, ": ",$0}' $1 //$1 为shell命令的第1个参数$ chmod +x mycat // ...
Unix 记忆留存 (一)
这是该系列第一篇。
前言本篇博客是笔者在学习Unix课程时所积累的学习笔记。希望对后来学习Unix的友友复习准备Unix的期末考试有帮助。
什么是UNIXUNIX是一类操作系统。
狭义理解,UNIX是一个分时操作系统的核心,控制和分配计算机资源(软硬件),协调各应用进程的运行。
广义理解,UNIX除了其核心外,还包括一些基本的工具,如编辑器、编译器、文件操作工具、文字处理工具等。
更广义地理解,UNIX还包括用户自己开发的各种工具软件。
UNIX的历史1965年,贝尔实验室参与由MIT和GE发起的一个计划:开发一个多用户、多任务、多层次(multi-user、multi-processor、multi-level)的操作系统MULTICS(MULTiplexed Information and Computing System)
1969年,MULTICS计划失败,贝尔实验室的工程师们退出该计划。 Ken Thompson将自己开发一款原本运行在MULTICS系统上游戏软件“Space Travel(星际之旅)”移植到GE-635的机器上(GECOS系统),但速度很慢,且GE-635的 ...
System Verilog语法记录
前言System Verilog作为Verilog HDL的升级,对于我们开发FPGA是有非常大的帮助的,可以大大减轻码量,减少错误的产生。
由于龙芯杯的缘故,我们小组在商议后决定使用System Verilog来开发CPU,所以在此重拾计组,学习System Verilog并记录,方便后续翻看和为后来人抛砖引玉。TIPS:学习这篇博客需要默认会Verilog HDL
logic对verilog的初学者来说,我们常常面临两种数据类型的选择——wire和reg,也常常纠结于在特定情况下选择哪一种数据类型比较合适的问题。
并且reg变量好像暗指用时序逻辑的触发器搭建的硬件“寄存器”,然而实际上,reg变量跟推断出的硬件没有任何关系,这种不一致也常常有着误导作用。
System Verilog使用更直观的logic关键字来描述通用的针对硬件的数据类型。我们将会看到你可以在过去verilog中用reg型或是wire型的地方用logic型来代替。编译器可自动推断logic是reg还是wire。
即logic是对reg,wire数据类型的改进,使得它除了作为一个变量之外,还可以被连续赋值、门单元 ...
Lab0实验报告
思考题Thinking 0.1首先陈述结论,执行cat Modified.txt的结果和第一次执行add命令之前的status不一样:
执行Untracked:
执行Modified:
在第一次执行add命令之前,README.txt刚刚被创建,我们并没有输入任何有关于它的git指令,因而它处于未跟踪状态。所以它会出现在未跟踪的文件一栏。在经历过对其进行的种种操作后,README.txt处于已经被跟踪但修改还未暂存的阶段,所以它会出现在尚未暂存以备提交的变更一栏。
Thinking 0.2Add The File: git add 文件名
Stage The File:git add 文件名
commit:git commit -m “message”
Thinking 0.31.代码文件 print.c 被错误删除时,应当使用什么命令将其恢复?
答:使用git checkout — print.c
2.代码文件 print.c 被错误删除后,执行了 git rm print.c 命令,此时应当使用什么命令将其恢复?答:使用 git ...