当前位置: 首页 > article >正文

Linux系列-进程的概念

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

这篇文章,我们主要分析一下进程。

之前,我们讲过了冯诺依曼体系架构, 我们常见的计算机,像笔记本,或者不常见的计算机,像服务器,大部分都遵守冯诺依曼体系。

截止目前,我们所认识的计算机,都是又一个一个的硬件组件组成的。

主要包括三个部分:

输入单元、中央处理器、输出单元 

 关于冯诺依曼结构,我们需要知道的有几点:

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取
  • 一句话,所有设备都只能和内存打交道

操作系统

什么事操作系统

我们这里主要讲三个部分,分别是什么是操作系统,为什么要有操作系统,以及操作系统是怎么样工作的。

首先,什么是操作系统:

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。这个是官方的解释

那什么是操作系统呢?

操作系统其实就是一个管家,他可以帮助你完成好你想做的事情。

由于操作系统大部分写的时候都是使用的C语言,少部分使用的汇编,汇编的作用主要是开机的时候识别操作系统。

每一种硬件的底层都需要对应的驱动程序,因为并不是操作系统直接访问的。驱动程序就像是操作系统伸出的触手一样,可以帮助操作系统更好的管理硬件,这个驱动程序要么是操作系统自带的,要么是对应的硬件所要下载的。

操作系统的作用

那为什么需要有操作系统呢?

  • 对下管理好软硬件资源,对上提供良好的用户体验
  • 对下要进行软硬件管理,保证底层稳定,高效,安全,能进行良好的工作
  • 对上提供一个稳定、高效、安全的运行环境

操作系统是怎么样进行管理的

其实,管理的本质是对数据进行管理。

就像你的老板,就像校长,是可以通过各种各样的数据来了解你的具体情况,从而可以对你进行管理。

而在这个其中,是存在着一个中间人的角色的。

中间人的作用是,对上获取数据,对下执行决策工作。这个中间人,就是操作系统。

那,这个是怎么样进行管理呢?

比如说你的校长,是怎么样通过数据来了解你呢?,这个时候就存在着一个结构体,比如说

struct student
{
	名字
	性别
	成绩
	struct student*next;
}

通过这个结构体组成的单链表就可以实现对于数据的控制。

对学生的管理,变成了对链表的管理,转化成了计算机的语言。

在管理者层面上,我们对所有被管理对象,构成节点,把所有的节点按照链表的形式连接起来

那,相对应的,操作系统是如何管理硬件的呢?

在操作系统内部封装了一个结构体

通过链表连接,形成了一张,device_list

struct device
{
	//name
	//status
	//id
	
}

 所以,我们在操作系统内部,看到的将全是链表,这个就是所谓的先描述,再组织,我们先对每个的性质进行描述,然后将每个节点连接起来。

任何计算机语言,都遵循先描述,再组织

所以,为什么现在所有的主流面向对象语言,都要提供面向对象的,标准库。

因为语言的本质是为了对各种对象进行管理,所以要有各种各样的管理工具,而语言中的面向对象,实质上是提供先描述的能力,而语言中的各种库,提供的是在组织的能力。

而操作系统的操作,其实都是对于数据结构的增删查改。

所以,我们其实可以想到,一定是现有的操作系统,再有的C语言。

那么,为什么会有数据结构呢?

最开始只有语言和操作系统,随着软件越来越大,写任何软件,都需要先描述再组织,进行组织的学科就叫做数据结构。

那么,为什么主流是面向对象呢?

面向对象其实就是怎么把一个对象描述起来,用语言进行先描述,提供各种各样描述的能力。

在银行当中,其实也是这个样子,银行本身就是一个系统,他有仓库,有收钱的地方等等。

而在银行当中,也存在着一个职位,叫做维护人员,他们负责维护底层的设备,使得底层的设备正常的运转,这个其实就像是操作系统当中的驱动程序,使得底层的硬件能够正常的运行。

而对于银行来说,银行系统是不相信任何人的,但是又要对外提供服务,所以,银行设置了各种各样的窗口,这个是银行开放的表现,对于操作系统来说,肯定也是不能随意的让用户修改自身的数据的,所以,它也把自己封闭起来,并且,它也提供了各种各样的对外的接口(系统调用),这种接口都是C语言式的接口,因为操作系统就是由C语言写的,所以对于C/C++,可以直接的使用系统调用。

比如说,我们向显示器进行打印,本质是对硬件进行写入,但是是不能直接写入了,而是通过系统调用。

对于系统调用来说,只要系统调用时C语言的接口,注定了所有软件的底层,都与C/C++有关。

而在银行当中,来的用户肯定也存在那种不识字的人,对于这种人,使用窗口的成本也很高,这个时候,就存在着另外一种岗位,叫做大堂经理。这个大堂经理,就像是操作系统当中的服务层,库。

系统调用接口,需要对系统有着一定的了解,对于一般的程序员来说,使用起来是比较麻烦的,所以我们封装成了库,直接使用库就可以了,比如说(C语言库,C++库),比如说,printf和scanf,还有图形化界面。

安卓的底层是Linux(内核)

什么叫做进程

操作系统是一个软件,所以开机后第一个加载的,就是操作系统。

操作系统最核心的工作就是进行进程管理,操作系统管理进程依靠的是进程的属性数据,在操作系统当中,加载一个进行,不止加载可执行程序到内存,还要加载进程的属性(这个叫做PCB,也可以说叫做task_struct)

 struct task_struct
 {
	 int pid;
	 int status;
	 int prio;
	 void* memptr;
	 .....
	 struct task_struct*nexr;
	
 }

 操作系统是如何对进程进行管理的呢?

先描述,再组织,先定义成某种结构体,在系统层面上进程的属性,结构体里面也有某种链接字段

对进程的管理,也就是对某种数据结构的管理。

所以说,其实什么叫做进程呢?

进程就是内核数据结构+程序的代码和数据

调度运行的时候,进程呈现出了动态的特征(被os调用,运行),从CPU上拿下来,拿上去。所以进程就像是运行起来的程序。

那为什么要有PCB呢?

因为操作系统要管理进程,可能存在多个进程,所以要先描述,在组织。

好了,本次的文章就到这里了,我们下次再见。 


http://www.kler.cn/a/377301.html

相关文章:

  • python开发聊天室
  • 第11章 LAMP架构企业实战
  • Vue.js 组件开发:构建高效、可重用的用户界面
  • 书生大模型第三关Git 基础知识
  • Qt Creator 的F5、F10 和 F11 调试快捷键
  • 前后端交互通用排序策略
  • AWS RDS MySQL内存使用
  • vscode makfile编译c程序
  • HTML鼠标移动的波浪线动画——页面将会初始化一个Canvas元素,并使用JavaScript代码在Canvas上绘制响应鼠标移动的波浪线动画
  • k8s Sidecar代理
  • 清华双臂机器人扩散大模型RDT:先预训练后微调,支持语言、图像、动作多种输入
  • TCP/IP协议简介
  • Vue 组件基础(五)
  • 【C++刷题】力扣-#645-错误的集合
  • SPRD Android 14 Launcher 3 中添加长按桌面图标启动自由窗口模式功能
  • 像mysql一样查询es
  • 使用Docker Compose构建多容器应用
  • 【Python项目管理】“无法创建虚拟环境”报错原因及解决方法
  • Maven(24)如何使用Maven进行代码覆盖率分析?
  • Linux-c 网络socket练习1
  • C++_STL_xx_番外01_关于STL的总结(常见容器的总结;关联式容器分类及特点;二叉树、二叉搜索树、AVL树(平衡二叉搜索树)、B树、红黑树)
  • C#与C++结构体的交互
  • 北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置
  • Javaweb梳理3——SQL概述+DDL语句1
  • Maven(22)如何使用Maven进行单元测试?
  • 面试经典 150 题:189、383