进程认识
(一)冯诺依曼体系结构
1.概念
输入设备
:包括键盘, 鼠标,扫描仪, 写板等
输出设备
:显示器,打印机等,硬盘,网卡等
存储器
: 指内存
中央处理器(CPU)
: 含有运算器(对数据进行计算任务)和控制器(对计算硬件流程进行一定的控制)等。在不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
在不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。所有设备都只能直接和内存打交道。
从数据流向上理解冯诺依曼
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。
这一段的描述来自这位博主的博客,点我~
(二)操作系统(OS)
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件(操作系统是一个对软硬件进行管理的软件!)
1.概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)
2.设计目的
- 与硬件交互,管理所有的软硬件资源为用户程序(应用程序)提供一个良好的执行环境。
- 在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件(操作系统是一个对软硬件进行管理的软件!)
3. 如何理解操作系统的 “管理”
先描述再组织
是操作系统管理的核心。管理是通过对数据的管理
先描述,那怎么描述?
在操作系统中,管理任何对象,首先要对 对象的特征进行描述。描述便是对软硬件资源的各种特征通过结构体对每一个对象的特征进行描述。
struct PCB
{
//各种信息等等
struct PCB* next;
};
描述表示描述被管理的对象。
再组织
在操作系统中,管理任何对象,最终都可以转化为对某种数据结构的增删改查。可以理解为对象之间通过链表(不一定是链表)的结构进行管理。
总结
计算机如何管理硬件?
- 描述起来,用struct结构体
- 组织起来,用链表或其他高效的数据结构
(即先描述,在组织)
4.操作系统调用接口
操作系统为了保证自己的数据安全,也为了保证给用户提供服务,操作系统以接口的方式给用户提供调用的入口。用户以此来获取操作系统内部的数据。
- 所以系统调用接口是什么???
是操作系统提供的用c语言实现的,自己内部的接口,所有访问操作系统的行为,都只能通过系统调用来完成。
而在系统调用接口之上我们又封装了用户操作接口(简单的理解就是我们编程时提供的库等),而又在此之上,我们用户(程序员)才是算是进行软件开发。
1.在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
2.系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统 调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
(三) 进程
1.概念
课本概念:
程序的一个执行实例,正在执行的程序等(一个加载到内存的程序或者正在运行的程序)内核观点:
担当分配系统资源(CPU时间,内存)的实体
当我们双击打开这个可执行程序的时候,将其运行起来的时候,本质来讲也就是将这个可执行进程加载到内存中了,CPU才能对其程序进行逐语句的执行,而当这个程序加载到内存了以后,我们称之为进程。
2.描述进程-PCB
- 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
- 课本上称之为PCB(process control block)Linux操作系统下的PCB是: task_struct
实际上描述进程的过程就是**先描述再组织
**。
进程 = 内核PCB数据结构对象(描述进程的所有属性) + 代码数据
3.如何对PCB进行管理?
任何一个进程,再加载到内存的时候,形成真正的进程时,操作系统要先创造描述进程的结构体对象----PCB(进程控制块)
根据进程PCB的类型,为该进程创建对应的PCB对象。
对进程的管理,并不是对一整个进程做管理,而是对进程里面的PCB进行管理,
对PCB对象用双向链表的数据结构进行链接,变成了对某种数据结构的增删改查。
那么只对PCB进行管理,我们如何得到进程里面的代码数据呢???
可以理解为,PCB存放有该对应的代码数据的地址,当我们想要访问该代码和数据时,从PCB里面找到该地址即可。
这里只是对进程的管理方式的认识,后面博客中会对PCB属性进行更深的理解。