前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux-进程(1)

linux-进程(1)

作者头像
用户10923087
发布2024-04-02 08:47:01
1290
发布2024-04-02 08:47:01
举报
文章被收录于专栏:我的计算机成长

1.冯诺依曼体系结构

在讲解进程之前,要先知道什么是冯诺伊曼体系结构。冯诺依曼体系结构是如今最主流的体系结构,所有的硬件可以分为5大单元,单元之间存在交互。

运算器和控制器就是cpu,运算器就是帮助计算机做运算的,控制器就是控制硬件之间的交互。

输入设备最常见的就是键盘,话筒,鼠标.....

输出设备最常见的就是声卡,显示屏,磁盘......

当然有些设备既做输入,也做输出.......

存储器指的就是内存,内存有个特点就是掉电易失,就是说没电了数据容易丢失。

但是磁盘就是永久性存储介质,即使没电数据也会在,是个输入或者输出设备。

关于冯诺依曼,必须强调几点:

这里的存储器指的是内存。 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。 一句话,所有设备都只能直接和内存打交道。 各个设备之间是独立的,但是通过电路,各个设备又是连接起来的,目的是为了设备之间的数据流动。

数据的流动就是从这个设备拷贝到另外一个设备,那么拷贝的速度快慢就决定了计算机效率的快慢。

 那么输入设备和输出设备之间存在一个cpu来快速计算不就可以了吗?为什么要使用存储器来减慢速度呢?因为存储器的造价,效率,单体容量都是适中的的。而输入和输出设备的速度太慢了,如果直接将数据交给cpu的话,又太快了,那么数据一交给cpu,cpu一下子就计算完成了,那么整体的效率也就变慢了。那么此时存储器就很重要了,可以调和这个效率,输入设备将数据给存储器,存储器将数据交给cpu计算,然后将计算好的数据返回给存储器,再由存储器交给输出设备。

那么这样做的话不就是增加了拷贝数据的次数吗?怎么会变得更快呢?那么在cpu计算数据1的时候,数据2已经通过输入设备加载到了存储器,这就是预加载,在cpu计算数据2的时候,数据1已经被存放在了存储器,输出设备需要的时候就直接从存储器拿,这就是缓存,通过预加载和缓存就能提高计算机的效率

正是因为冯诺依曼这种体系结构引入了内存,将效率问题转化成了软件问题,使得内存快慢决定计算机的快慢,让大家能使用效率不错i的计算机。


2.操作系统(Operator System)

2.1概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(例如函数库, shell程序等等)

2.2设计OS的目的

与硬件交互,管理所有的软硬件资源 为用户程序(应用程序)提供一个良好的执行环境

os是怎么管理硬件的呢?每一款硬件设备都有对应的厂商,每家厂商都会为硬件设计软件,也就是驱动程序来管理硬件,所以os只需要管理硬件对应的驱动程序就行了。  

管理硬件资源是手段,为的是为用户提供良好的执行环境,那么用户想要使用硬件设备的时候,就直接去访问os吗?不是的,os内有大量的数据,如果给用户直接访问的话,就不安全,所以用户需要使用系统调用的接口来调用os,防止用户直接访问os,提高了安全性。

scanf和printf都使用了硬件设备,那么这两个函数的底层一定封装了系统调用,只有这样才能通过系统调用来使用硬件设备,用户不能直接跳过系统调用接口来调用os,也不能跳过os来使用硬件设备。

2.3定位

 在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件.

2.4总结

计算机管理硬件

1. 描述起来,用struct结构体 2. 组织起来,用链表或其他高效的数据结构


3.系统调用和库函数概念

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。


4.进程

4.1基本概念

课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(CPU时间,内存)的实体。

我们平时写的程序会存放在哪里呢?大家都知道程序是二进制文件,那么就存放在磁盘中, 磁盘就是硬件设备。那么当我们运行起来这个文件,根据冯诺依曼体系结构,这个文件会先加载到内存中,然后再被cpu进行计算。 

我们在使用计算机的时候,可以同时启动很多个程序,那么就代表着内存中可以加载很多个文件,那么os就需要对这些加载到内存的文件进行管理,那么os怎么进行管理呢?先描述,在组织。

4.2描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct

4.2.1task_struct-PCB的一种

在Linux中描述进程的结构体叫做task_struct。 task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

4.2.2task_ struct内容分类 

标示符: 描述本进程的唯一标示符,用来区别其他进程。 状态: 任务状态,退出代码,退出信号等。 优先级: 相对于其他进程的优先级。 程序计数器: 程序中即将被执行的下一条指令的地址。 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。 I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息

那么有了PCB之后os就认识了这些程序,因为PCB描述了这些程序的属性。那么os管理进程就变成了管理PCB的链表。

4.3组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

4.4查看进程

进程的信息可以通过 /proc 系统文件夹查看

如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹

大多数进程信息同样可以使用top和ps这些用户级工具来获取

当我编译下面这段代码生成可执行程序时,再将它运行起来,就有了一个进程,那么我们怎么知道有一个进程了呢?

使用下面这段指令,就能查到这个可执行程序对应的进程,第二行就是对应的进程。

那么第三行是什么呢?grep这个指令执行起来后也会变成一个进程,所以第三行是grep这个指令执行后所产生的进程。所以可以得出一个结论:几乎所有独立的指令,都是一个程序,执行后都会变成进程!

 需要注意的是进程是有生命的,如果进程结束了就查不到了,所以我们可以使用do-while的指令查看到进程从开始到结束的全过程。

 今天的分享到这里就结束了,感谢大家的阅读!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.冯诺依曼体系结构
  • 2.操作系统(Operator System)
    • 2.1概念
      • 2.2设计OS的目的
        • 2.3定位
          • 2.4总结
          • 3.系统调用和库函数概念
          • 4.进程
            • 4.1基本概念
              • 4.2描述进程-PCB
                • 4.2.1task_struct-PCB的一种
                • 4.2.2task_ struct内容分类 
              • 4.3组织进程
                • 4.4查看进程
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档