网站二级域名怎么设置网站建设常用视频格式
web/
2025/10/3 18:43:08/
文章来源:
网站二级域名怎么设置,网站建设常用视频格式,网站建设开发ppt模板下载,机械外贸有哪些平台操作系统的理解 冯诺伊曼体系结构为什么必须通过内存然后到cpu存储金字塔冯诺伊曼结构的改进在哪#xff1f;我们可不可以全部用寄存器来做存储器在硬件数据流动角度学以致用#xff1a;解释程序运行为什么要加载到内存程序没被运行之前存在哪里#xff1f; 操作系统概念广义… 操作系统的理解 冯·诺伊曼体系结构为什么必须通过内存然后到cpu存储金字塔冯·诺伊曼结构的改进在哪我们可不可以全部用寄存器来做存储器在硬件数据流动角度学以致用解释程序运行为什么要加载到内存程序没被运行之前存在哪里 操作系统概念广义的操作系统侠义的操作系统 结构尝试理解操作系统为什么要有操作系统管理作为用户可以直接访问底层硬件吗 进程task_struct查看一个进程的pid查看父进程 杀死一个进程创建一个进程查看一个进程的PCB进程的状态S睡眠 状态t暂停状态D磁盘休眠状态Z 僵尸状态孤儿进程 特别的运行状态的理解 一个进程一旦持有cpu会一直运行到这个进程结束吗阻塞状态的理解 挂起态 谢谢观看 在谈操作系统之前我们先从硬件出发 冯·诺伊曼体系结构
红色箭头代表数据信号数据流动方向黑色箭头代表控制信号 可能有的同学不知道上面五个东西具体是什么我简单说明下
项目内容输入设备键盘鼠标网卡摄像头磁盘话筒等存储器内存输出设备显示器磁盘网卡 声卡等cpu运算器控制器
可能有同学会问为什么网卡和磁盘既是输出设备又是输入设备呢因为网卡和磁盘可读可写。当我们把东西从内存放在磁盘里时磁盘就是输出设备当要执行外存中的程序时必须通过内存然后到cpu这时磁盘就是输入设备。
为什么必须通过内存然后到cpu
这是冯·诺伊曼体系结构决定的这样能提高效率。
各个设备之间的数据流动的本质就是数据的拷贝 拷贝的速度决定了数据流动的速度什么存储器拷贝速度快呢 下图给了答案
存储金字塔 冯·诺伊曼结构的改进在哪
加了存储器没叫存储器之前数据直接从输入设备到cpucpu是运算器和控制器的集合然后再到输出设备。这样效率会非常低因为大量的时间都在等待输入设备输入了。于是我们发明了存储器把程序预先加载在内存中然后再交给cpu这样做由原先输入设备决定效率变为由内存决定效率。这样做效率提升了1千倍
我们可不可以全部用寄存器来做存储器
可以是可以但是价格特别昂贵不利于计算机的普及。
在硬件数据流动角度
1cpu不和外设打交道而是和内存打交道 2外设输入和输出的数据不是直接传给cpu的而是先要放入内存中
学以致用
解释程序运行为什么要加载到内存
因为我们的程序要被cpu访问运算所以要先到内存才能到cpu 关于拷贝到内存的什么位置和什么时候拷贝这是由操作系统完成的
程序没被运行之前存在哪里
就是普通的二进制文件在磁盘上
操作系统
概念
进行软硬件资源分配的软件。 对软件比如说我们输入一个文件地址操作系统就能帮我们找到这个文件卸载安装程序等等。 对硬件比如说我们分配内存的大小控制显示器等等。
广义的操作系统
操作系统内核操作系统外壳周边程序 操作系统周边程序指的是给用户提供使用操作系统的方式比如说咱们的图形化界面windows系统安装时自带的office等
侠义的操作系统
只管操作系统的内核
结构 我们能进行视频通话我们的操作系统希望控制显示器摄像头声卡网卡等硬件但是每个厂家的硬件设备不一样那么我们操作系统的程序会随着硬件设备不一样而改变吗而且我们想硬件的升级是不是操作系统不答应我们就改变不了呢硬件和操作系统中间有一层驱动层每一个硬件都有驱动。
尝试理解操作系统
为什么要有操作系统
类型的问题学校里面为什么要有除老师学生以外的其他人员比如说宿管阿姨保安。没有宿管阿姨可能会发生串寝的问题没有保安可能会有校外的闲杂人员进来。这些其他人员给我们提供了良好的学习环境。 操作系统给我们提供了稳定高效安全的运行环境 层状的结构划分 操作系统管理我们的软硬件。那么什么叫管理呢 管理
什么是管理者呢 我们简单的定义就是大部分做的事情都是决策有关的。 比如在学校的场景校长就是管理者大到我们学什么和先学什么犯错误了是否开除小到寝室住哪里都跟校长的决策有关校长在学校的场景就是管理者我们学生就是被管理者 但是除了升学和毕业能见到校长其他时间都没直接接触 也就是说管理者不需要和管理者直接接触 可是他连我的面都没见过他是怎么做到的 比如说我们评优评先都是根据绩点管理我们寝室在哪里是根据学院和年级班级这些数据确定的。 管理的本质都是对数据做管理而不是对人做管理 校长怎么拿到我们数据的通过辅导员间接拿到的。 校长关心的是什么数据我喜欢打麻将我喜欢吃葡萄这种数据吗显然不是而是绩点获奖情况等学习相关的信息 校长是关心你吗还是关心学生。关心的是学生
校长觉得一个学校几万人还是有点多但是这个校长会写代码讷能不能通过计算机把所有的同学管理起来呢 虽然大家都不一样但是属性都一样只是里面的值不一样
于是我们为了描述一个学生定义了一个结构体然后再根据需求把这些数据组织起来。这个组织称为数据结构 比如我们可以通过链表把这些结构体组织起来方便删除。 也可以通过顺序表把这些结构体组织起来方便查找。 具体选什么数据结构要看应用的场景。 从此对学生的管理变成对这个数据结构的增删查改 比如开除一个学生就是对数据结构的删除。 说回操作系统 我们有一个 设备的结构体来描述设备,我们可以把设备这个结构体通过链表组织起来对设备的工作转化为对链表的增删查改。
struct dev
{int type;int manufacturer;...
};校长类似操作系统不和硬件直接沟通
作为用户可以直接访问底层硬件吗
类比我们去银行柜台取钱银行可以直接让我们进后台取钱吗他给我们提供了一个柜台窗口因为它害怕群众里面有坏人哪怕只有万分之一这也会对银行造成不小的伤害。 操作系统同理害怕我们胡乱作用伤害硬件所以给了我们系统调用这一层。不能直接访问我们的数据结构操作系统提供了大量的接口系统调用来满足用户的需求。好比柜台把用户隔离了起来但也满足了人们的需求。
进程 我们把一个程序加载到内存中 这个程序还不能叫进程 当我们要写了很多程序从磁盘加载到内存时这么多代码和数据怎么管理起来了? 先描述再组织的思想我们描述这个代码和数据 的优先级 进程id等等 这个用来描述的结构体称为PCB 然后这些PCB 通过链表的形式组装起来。 这样我们就引出了第一个结论什么是进程 进程是 PCB 代码和数据 这个PCB相当于进程的简历
task_struct
tack_struct 是Linux下PCB的名称 它有以下内容
标示符: 描述本进程的唯一标示符用来区别其他进程。状态: 任务状态退出代码退出信号等。优先级: 相对于其他进程的优先级。程序计数器: 程序中即将被执行的下一条指令的地址。内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据。IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。
查看一个进程的pid
我们用的指令和我们编译后的代码都是可执行程序。通过file命令可以证明 都是excutable 可执行的 ps ajx | head -1 ps ajx | grep process 我们可以看到这个进程的pid是13346 为什么 还有grep 这个进程了因为grep本身这个命令就是进程 只不过一瞬间执行完毕了而已 我们还可以通过getpid这个系统调用来查看一个进程的pid
#includestdio.h
#includeunistd.hint main(){pid_t id getpid(); while(1){printf(当前进程pid:%d,id); printf(prcess is workig\n); sleep(1); } return 0; }
~ 查看父进程
getppid
杀死一个进程
kill -9 进程id
创建一个进程
fork 当我们运行这个代码的时候 printf会被执行两次 因为fork创建了一个子进程 多了一个进程就是多了一个PCB
查看一个进程的PCB
ls /proc/进程名 exe指向的是绝对路径下的可执行程序 当一个程序正在运行时我们把这个可执行删了这个程序还是在运行的因为它以及从磁盘加载到内存了 通过cwd 我们可以看到进程所在的路径我们能不能改掉这个路径呢 可以的通过chdir
#includestdio.h
#includeunistd.h
#includesys/types.h
int main()
{ chdir(/home/lj/111); FILE *pf fopen(log.txt,w); (void)pf; while(1) { printf(this process is working\n); sleep(1); } return 0;
} 进程的状态
本质是task_struct 的一个变量标志位有哪些状态呢
R运行状态(running):并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列中S睡眠状态sleeping:意味着进程在等待某件事完成这里的睡眠也叫浅睡眠可以被中断D磁盘休眠状态Disk sleep这个也叫不可中断状态T停止状态可以通过SIGSTOP信号给进程来停止另一进程这个暂停的进程可以通过SIGCONT信号让进程继续运行。X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。
S睡眠 状态
int main()
{ pid_t pid getpid(); while(1) { printf(I am process id:%d\n,pid); sleep(1); } return 0;
} 监视小脚本 while :; do ps ajx| head -1 ps ajx | grep testStatus | grep -v grep; sleep 1; done 为什么这个程序是S状态了因为cpu的速度很快 它打印了大量的字符缓冲到缓冲区里然后显示器慢慢的1秒1秒的显示所以cpu大量处于空闲状态等待显示器准备就绪 当我们把sleep去了 也是S状态因为cpu比外设的速度快太多了。 当我们把sleep 和 printf去掉之后 才是R状态 因为CPU不和外设打交道了。
t暂停状态
通过kill -l 可以看到kill命令的选项 kill-19 可以让一个进程停止 kill-18 可以让一个进程恢复 我们的调试也是让一个进程停止
D磁盘休眠状态 操作系统有权在内存不够的清空下杀死进程。 如果我们直接杀死进程 就会直接丢失1GB的数据所以操作系统把这个进程标记为D状态不可杀死等待这个IO结束。
磁盘休眠状态又是又叫不可中断睡眠状态通常会等待IO的结束
Z 僵尸状态
进程退出的时候不是直接释放的需要父进程读取该进程PCB中的退出信息(知道事情是否办成功)如果一直没有父进程读取那么该进程一直是僵尸状态。数据和代码释放了 但是PCB没有释放
#includestdio.h
#includeunistd.h
#includesys/types.h
void runchild()
{int cnt 5;while(cnt){ printf(进程号%d 我是子进程\n,getpid());sleep(1); cnt--;}
}
int main()
{int ret fork();if(ret 0)runchild();}else{while(1){printf(进程号%d 我是父进程\n,getpid());sleep(1);} }return 0;
}当这段代码执行完毕子进程就会一直在僵尸状态会造成内存泄漏
孤儿进程
子进程运行期间父进程先退出了 子进程将会被1号进程“收养” 我们命令行启动的进程父亲是bash会自动回收
特别的
下图是操作系统课上的进程状态 和Linux的进程状态有共性但是不完全一样
运行状态的理解
进程在运行队列里就称为运行状态
一个进程一旦持有cpu会一直运行到这个进程结束吗
不会 因为操作系统会基于时间片轮转调度。 单个cpu多个进程以切换的方式进行调度在同一个时间段内同时推进代码 则称为并发 进程切换中最重要的事情上下文数据的保护和恢复 多个cpu任何时间有多个进程真的同时运行称为并行
阻塞状态的理解
阻塞态时进程从运行队列里拿出来进入该设备的阻塞队列中。 唤醒就是从阻塞队列放回运行队列 入队列的不是进程的代码和数据而是进程的task_struct
挂起态
比阻塞的时候 内存中的进程的代码和数据 为了缓解内存压力被复制磁盘上然后内存中的代码和数据被释放。牺牲效率换空间
谢谢观看
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86362.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!