首页 > 系统相关 >linux: 操作系统与进程概念

linux: 操作系统与进程概念

时间:2024-05-25 21:12:29浏览次数:21  
标签:文件 操作系统 一个 PCB 内存 linux 进程

  在计算机的组成原理中,我们经常用计算机通常遵循冯诺伊曼体系结构,即控制器,存储器,运算器,和输入设备及输出设备,而通常将里面的存储器称为内存,运算器和控制器一起集成为CPU,输入输出统称为外设,我们日常写的代码由输入设备加载到内存中,由处理器识别成机器码,再通过CPU中的指令方式执行。这些指令是被以电路的方式集成在CPU中的,而代码则是通过指令集来完成的,存储器和外设的互动被称为io设备.

  当一个程序被运行时,首先要加载到内存中,而CPU想要执行指令,只能去内存中以多种方式访问数据,控制器将数据定期的从内存刷新到外设中,例如,在C语言中,我们调用了scanf函数与printf函数,语言编辑器将我们的C语言一系列编译后成为指令可以识别的机器码,然后,操作系统分辨这行代码用到了IO,则通过系统调用,以及CPU的指令来达到将数据从内存写到外设中.

  操作系统是一个对硬件与软件进行统一管理的软件,主要分为四大部分,分别为内存管理,文件管理,进程管理和驱动管理,一个完整的操作系统,通常只对外开放系统调用来完成一系列的操作,而系统调用对于用户来说是不友好的,因此有c++或shell来帮助用户执行这些硬件的IO操作,以及一些系统调用.

  首先一个文件在磁盘里被称为一个文件,如果这个文件是一个可执行的二进制文件,当它被执行以后,就会被加载到内存里称作为进程,而在操作系统中,针对每一个被加载到内存中的进程,都会有一个单独的PCB进程块,这个PCB进程块是由操作系统来维护的,本质在linux代码中是一个命名为struct task_struct的一个结构体,其中包括进程的各种属性以及进程被分配的内存区域,静态文件是没有PCB的,所以一个完整的进程是需要有,二进制文件和管理这个二进制文件代码的一个PCB进程块.

  因为操作系统中每一个不同的文件大小和属性是不一样的,所以需要有一个统一的标准来管理这些文件,因此分配给每一个文件一个PCB进程块,然后通过控制这些PCB进程块来间接控制这些文件,在linux中使用C语言的get PID可以得到一个进程的ID,这个ID就是PCB进程块结构体中的一个属性,唯一标识一个进程,而get PID是linux中的一个系统调用接口,每一个进程的PID在不同的时候启动是不一样的,因为一个文件在被加载到内存后,操作系统会给一个文件分配一个PCB进程块,而这个进程块不是固定的,所以他的PID也不固定.

  之前提到了一个可执行文件,在被加载到内存以后,可以被称为进程,之后存在于磁盘的这个文件便没有用了,就算删掉以后可执行程序也不会被影响,比较特殊的是,linux中有一个目录为proc的目录,这是一个内存级别的目录,这里放着操作系统中正在运行的进程,通过以进程的PID命名的方式来分辨每一个进程所在的文件,这个目录下的文件可以查看当前正在运行的进程的属性.

如下图为linux下proc目录下的内容,每个数字为一表示一个进程,是进程的pid.

 

  在linux中还有一个系统调用,就是c接口名字为get ppid,用于显示这个进程,父进程的ID,一般一个进程的父进程就是解释器,解释器通过创建子进程的方式来运行一个进程,我们使用C语言写的程序也可以通过调用fork系统调用来创建一个子进程,这个子进程有两个返回值,我们通常需要用一个条件判断来分给子进程和父进程不同的任务,如果这个进程是父进程,那么这个函数返回为子进程的PID,如果这个进程是子进程则返回零,当一个进程执行fork函数后,父进程和子进程同时共享fork函数后所有的代码.

 

 如图打印进程的pid和ppid.可以看到hello.exe的ppid为bash解释器.证明解释器通过创建子进程的方式运行一个程序.

 

标签:文件,操作系统,一个,PCB,内存,linux,进程
From: https://www.cnblogs.com/qjwxlj/p/18212999

相关文章

  • linux:常用工具 yum vim git gbd
    linux操作系统如果最小化安装是很难使用的,所以需要很多工具进行扩展,这些扩展网上有很多,同时也是给了用户很多选择,但是并不是所有的程序都是可靠的,安卓和windows都是需要去有官方认证的平台下载安全的应用使用,而linux也是有不同的发行版本的团队整理的可靠的安装包使用,......
  • Android跨进程通信--Binder机制及AIDL是什么?
    文章目录Binder机制Binder是什么?Binder相对于其他几种跨进程通信方式,有什么区别?谈一下BinderIPC通信过程:具体的通讯过程是什么?Binder如何处理发送请求与接收请求?Binder是通过什么方式来进行内存映射的?Binder是如何进行管理的?Binder、Socket的数据限制是多少?自己APP如......
  • Linux crontab使用整理,让你少走弯路
    前言最近在Linux上使用crontab,crontab可以理解为设置并执行定时任务的工具,在使用过程中,我遇到一些坑,所以整理一下,让大家避坑的同时还能学习到知识,话不多说,上才艺!安装略(没有安装的同学们,请自行安装,这里就不多废话了)常用命令集锦       servicecrondstart  ......
  • Linux的if语句和for循环
         ......
  • 进程和线程的区别
    进程与线程的区别进程:进程是操作系统中资源分配的基本单位。它包括程序代码、打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间等。进程拥有独立的地址空间,这意味着每个进程都有自己的内存空间,一个进程不能直接访问另一个进程的内存空间,除非通过进程间通信(IPC......
  • linux 用脚本定义全局变量
    新建一个脚本比如gvar.sh然后可以在里面添加全局变量exportCC_PREFIX=/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2exportPATH=$CC_PREFIX/bin:$PATHexportLD_LIBRARY_PATH=$CC_PREFIX/lib:$LD_LIBRARY_PATHexportLD_LIBRARY_PATH=$CC_PREFIX/loo......
  • Linux常用系统命令
    1、yum、apt操作、软件包列表、常用命令yumcheck-updata可更新软件列表;yuminstall<package_name>安装指定软件yumlist可安装软件清单;yumsearch<keyword_>查找软件yumcleanpackages:清除缓存目录下的软件包yumremove包名:卸载apt-getinstall/......
  • 操作系统总结4----死锁的处理策略总结
    目录2.4.2死锁的处理策略-----预防死锁(1)知识总览(2)破环互斥条件(3)破环不剥夺条件(4)破环求情和保持条件(5)破环循环等待条件总结2.4.3死锁的处理策略-----避免死锁(1)知识总览(2)什么是安全序列?(3)安全序列、不安全状态、死锁的联系(4)银行家算法总结2.4.4死锁的处理策略--......
  • 企业生产环境中的麒麟V10(ARM架构)操作系统部署jdk和redis三主三从交叉版集群
    前言:麒麟ARM操作系统是国企和政务机关推行信创化选择率比较高的一款操作系统,然而ARM操作系统非主流的X86系统,除了命令一样,在架构方面差别极大,初次接触多多少少会踩坑,下面我将在公司中部署的实例列举出来,供大家参考,ip和设计机密信息不方便展示,统用虚拟信息代替。经过多次验证,用了......
  • Nodejs安装及配置,包含Windows和Linux两种平台
    目录1.下载安装包2.Windows下安装3.Linux下安装4.使用Vite创建Vue项目5.结语Node.js是前端开发的必备工具,特别是在使用Vue或React开发项目时,需要npm安装依赖、运行开发环境以及项目打包,这里就分别介绍一下在Windows和Linux平台如何安装Nodejs。文章结尾,笔者还会......