硬件视角计算机是如何工作的

“单CPU单核的计算机”,同一时刻,一次只能执行一条指令。

操作系统(Operating System--OS)

操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。OS的主要作用就是协调------硬件资源会被多个任务同时访问,此时OS的作用就是协调不同任务对硬件资源的访问,OS管理着硬件资源,分配给不同的任务使用。OS就像一个管理员,它会高效、公平、低耗地分配资源、协调工作和遇到的问题。OS的职责可以简单划分如下:进程管理,内存管理,文件管理,网络管理和驱动管理。

程序(program)和进程(process)

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

程序是一套做数据处理的步骤。

站在用户角度看:

 程序是静态的步骤 (就好比一份菜谱),而进程是动态的(是按照菜谱做菜的过程):程序是有序代码的集合,进程是程序的执行。

进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可以长久保存,按照菜谱和做菜去想象这就更容易理解了。值得一提的是:一个程序可以进行多次(表现为多个进程),甚至可以多个进程同时存在。

站在OS角度看:

进程是OS进行资源分配的基本单位、最小实体。换言之,同一个进程中的资源是共享的,而不同进程之间的资源是隔离的,比如A进程只能访问A进程自己的资源而不能去访问B进程的资源,更无法访问被OS直接管理的资源(这里主要讨论内存)。

进程管理(又称进程调度):负责CPU的分配。

要做好进程调度我们要面临哪些问题?

1、需要把进程这个抽象的概念用数据表示处理----面向对象思想,只有编程数据,计算机才能很好地处理。

2、需要对进程做区分:哪些现在可以分配CPU了,哪些现在暂时还没准备好。通过对进程做状态划分,来区分出处于不同情况下的进程(进程状态)

一个状态的一生(站在进程角度看自己)

新建:随着程序的启动运行      新建->就绪:进程的初始化工作完成(这个工作OS的指令完成的)就绪->运行:进程被OS选中,并分配了CPU之后           运行->结束:进程的最后一条指令执行结束(可以简单理解成 main方法执行结束)      运行->就绪:1、被高优先级的进程抢占了2、时间片耗尽3、进程可以执行一些OS提供的系统调用,主动放弃            运行->阻塞:等待一些外部条件;等待IO设备;进程休眠一段时间等等可能发生的情况       阻塞->就绪:外部条件满足 IO数据来了;休眠时间到了 等等        结束:进程PCB彻底被OS回收了

站在OS角度看:

同一时刻,处于不同状态的下进程不止一个   处于新建状态有n1个,处于就绪状态的有n2个,在单CPU单核情况下,处于运行状态的只有一个,处于结束状态的有n3个,处于阻塞状态的有n4个。就绪队列:装有所有处于就绪状态的进程,这里装的都是等待被分配CPU的进程,就绪队列一般就一个;阻塞队列:等待某些外部条件的进程组成的队列,阻塞队列一般每个条件都可以有一个。

3、现在我们有等待分配CPU的所有进程列表,那么问题来了,选择哪个进程上CPU?

上文已经提到过了,我们需要保证公平,低耗,高效。我们所给出的优先顺序是:先来先服务;划分优先级;短作业优先;轮转调度等等

4、OS什么时候会介入进程调度:需要选择一个新的进程,进行CPU分配。

有以下几种情况:(1)一个新的程序刚处于就绪状态,当该进程的优先级高时--具备这种能力的OS被称为抢占式 (2)运行状态的进程结束了 (3)OS每隔一段时间就会调度一次:进程的时间片耗尽 (4)进程主动放弃CPU 如上文所说的运行->阻塞或运行->就绪 。所有这些都是CPU空闲下来的时候。

5、OS具体怎么进程切换:通过上下文切换---保护上一个进程的上下文+恢复下一个进程的上下文

在进程调度中,上下文是指:以PC寄存器所代表的一组寄存器中的值。

保护上下文:把寄存器中的值保存到内存中的某个位置

恢复上下文:把内存中之前保存的值写入寄存器中。

由进程管理我们引出一些OS概念

1、并行(parallel) 和 并发(concurrent)

并行是指两个或者多个事件在同一时刻发生。

而并发是指两个或多个事件在同一时间间隔发生。

也可以说并行是进程真的在同时执行,而并发是进程假的同时在执行,微观上表现为一次只执行一个进程,但宏观上多个进程在同时进行,人眼无法识别罢了,就好比时分复用概念。

2、用户态(user space) 和 内核态(kernel space)

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态 和 内核态

内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。

用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

CPU正在执行的是OS的指令时,就进入到内核态,如果正在执行的是普通进程的指令时,就在用户态。用户态的指令权限低(只能访问OS规定的资源),内核态的指令权限高(所有硬件都可以访问)。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。用户态的性能较好,内核态的性能较差。

执行流:拥有独立PC的一套指令,不同的执行流从现象上看起来是完全独立的。

java应用程序员眼中的内存:JVM的内存空间分为栈区、堆区、方法区 .JVM作为OS眼中的普通进程,OS分配给JVM进程的内存。

线性地址 和 物理地址

物理地址:真实的内存中的地址;线性地址:物理地址被OS进行转换后的一个地址。OS分出来的空间是线性地址空间,实际的物理内存,可以延迟到要访问这段内存的时候再分配。

进程间通信(IPC)

理论上,进程之间是独立的,但实际上,往往是多个进程之间互相配合来完成复杂工作,比如MySQL里面我们通过workbenc进程和MySQL服务器进程进行通信来实现数据的增删改查。

进程间通信的常见方式;1、管道 2、消息队列 3、信号量 4、信号 5、共享内存 6、网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值