Linux——进程

news2024/11/28 5:48:19

目录

冯诺依曼体系结构

操作系统(Operator System)

概念

设计OS的目的

定位

如何理解 "管理"

总结

系统调用和库函数概念

承上启下

进程

基本概念

描述进程-PCB

task_struct-PCB的一种

task_ struct内容分类

组织进程

查看进程

通过系统调用获取进程标示符

通过系统调用创建进程-fork初识

批量注释


冯诺依曼体系结构

       我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

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

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

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

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

  

 

操作系统(Operator System)

概念

        任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

设计OS的目的

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

定位

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

如何理解 "管理"

  • 管理的例子
  • 描述被管理对象
  • 组织被管理对象

         

对学生的管理,转换成对链表结构的增删整改等,该管理模型完成的过程即建模的过程。

 

总结

计算机管理硬件
1. 描述起来,用struct结构体
2. 组织起来,用链表或其他高效的数据结构

系统调用和库函数概念

        在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
        系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

 

承上启下

        那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!

进程

基本概念

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

 pcb内的属性与文件属性大部分没有关系,即与磁盘内的属性几乎没有关系

描述进程-PCB

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

task_struct-PCB的一种

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

task_ struct内容分类

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

组织进程

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

查看进程

进程的信息可以通过 /proc 系统文件夹查看
  • 如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。

ls/proc

 

  • 大多数进程信息同样可以使用top和ps这些用户级工具来获取
[root@VM-12-17-centos lesson10]# cat Makefile
myprocess:myprocess.c
	gcc -o myprocess myprocess.c
.PHONY:clean
clean:
	rm -f myprocess
[root@VM-12-17-centos lesson10]# cat myprocess.c
#include <stdio.h>
#include<unistd.h>

int main()
{
  while(1)
  {
    printf("hello process\n");
    sleep(1);
  }
  return 0;
}

 

通过系统调用获取进程标示符

进程id(PID)
父进程id(PPID)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
 printf("pid: %d\n", getpid());
 printf("ppid: %d\n", getppid());
 return 0;
}

 

 

 

通过系统调用创建进程-fork初识

      (前面通过运行需要运行的文件创建子进程eg: ./myprocess
        现在我们运行 man fork 认识fork
        fork有两个返回值
        父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

[root@VM-12-17-centos lesson10]# cat myprocess.c
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
  printf("AAAAAAAAAAAA\n");
  fork();
  printf("BBBBBBBBBBBB: pid:%d, ppid:%d\n",getpid(),getppid());
  sleep(1);

  return 0;
}

[root@VM-12-17-centos lesson10]# vim myprocess.c
[root@VM-12-17-centos lesson10]# make
gcc -o myprocess myprocess.c
[root@VM-12-17-centos lesson10]# ./myprocess
AAAAAAAAAAAA
BBBBBBBBBBBB: pid:592, ppid:28253
BBBBBBBBBBBB: pid:593, ppid:592

[root@VM-12-17-centos lesson10]# cat myprocess.c
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>


int main()
{
  printf("AAAAAAAAAAAA:pid:%d ppid:%d\n",getpid(),getppid());
  fork();
  printf("BBBBBBBBBBBB: pid:%d, ppid:%d\n",getpid(),getppid());
  sleep(1);

  return 0;
}

[root@VM-12-17-centos lesson10]# ./myprocess
AAAAAAAAAAAA:pid:12409 ppid:28253
BBBBBBBBBBBB: pid:12409, ppid:28253
BBBBBBBBBBBB: pid:12410, ppid:12409

        两个返回值,父进程子进程返回的不同

[root@VM-12-17-centos lesson10]# cat myprocess.c
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>


int main()
{
  printf("AAAAAAAAAAAA:pid:%d ppid:%d\n",getpid(),getppid());
  pid_t ret=fork();
  printf("BBBBBBBBBBBB: pid:%d, ppid:%d, ret:%d, &ret:%p\n",getpid(),getppid(),ret,&ret);
  sleep(1);
  
  return 0;
}
[root@VM-12-17-centos lesson10]# make
gcc -o myprocess myprocess.c
[root@VM-12-17-centos lesson10]# ./myprocess
AAAAAAAAAAAA:pid:18514 ppid:28253
BBBBBBBBBBBB: pid:18514, ppid:28253, ret:18515, &ret:0x7fffc8a3e39c
BBBBBBBBBBBB: pid:18515, ppid:18514, ret:0, &ret:0x7fffc8a3e39c

        if分流

#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
  pid_t ret=fork();
  if(ret==0)
  {
      //子进程
    while(1)
    {
       printf("我是子进程,我的pid是:%d,我的父进程是:%d\n",getpid(),getppid());
       sleep(1);
  
    }
  
  }
  else if(ret>0)
  {
    //父进程
    while(1)
    {
       printf("我是父进程,我的pid是:%d,我的父进程是:%d\n",getpid(),getppid());
       sleep(2);
  
    }
  }
  else 
  {}

  return 0;
}

                fork后执行流变成两个执行流,谁先运行由调度器,且代码共享,通常我们用if /elseif来执行流分流。

 

 

 

批量注释


批量注释首先第一在命令模式control v左下角出现v-block。那么那么v就vision视图的意思,视图块模式,然后选中j,(hjkl),选中区选中之后,将你的输入切成大写,然后输入i,然后再输入双斜杠释,指定一行带ESC,此时批量化就注释完成

 
那么怎么样去进行去掉它的注释?那么control v然后选中区域(hjkl)。然后直接输入d即可,我们对应的内容全部删掉。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm使用Git进行版本控制(自建远端Git仓库)

目录本地Git安装远端Git仓库搭建在Pycharm中使用Git进行版本控制设置Git可执行文件路径创建本地Git仓库设置远端Git仓库提交及推送本地Git安装 安装本地Git用于被Pycharm调用&#xff0c;安装方法参考以下博客&#xff1a; Git 的下载与安装_作者&#xff1a;fengzhx0820 远端…

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

目录 前言&#xff1a; 小车效果展示&#xff1a; 5路数字灰度传感器&#xff1a; 巡线思路&#xff1a; 加入PID调节的代码&#xff1a; 前言&#xff1a; 之前买了一批5路灰度传感器&#xff0c;想用这传感器进行循迹&#xff0c;无奈网上和官方的资料提供的还是比较少&a…

ARM X210 官方 uboot 配置编译实践

一、X210官方uboot配置编译实践1 1. 找到官方移植好的 uboot&#xff08;BSP 概念&#xff09; (1) 源头的源代码是 uboot 官网下载的。这个下载的源代码可能没有你当前使用的开发板的移植&#xff0c;甚至找不到当前开发板使用的 SoC 对应的移植版本。 (2) SoC 厂商在推出一…

分享145个ASP源码,总有一款适合您

ASP源码 分享145个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 145个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1gxm3rFFLu8pUhVncQga6-g?pwd7n85 提取码&#x…

HJ56、HJ58、JZ4、JZ6、JZ15、JZ17几道题

文章目录HJ56 完全数计算题目描述&#xff1a;具体实现&#xff1a;HJ58 输入n个整数&#xff0c;输出其中最小的k个题目描述&#xff1a;具体实现&#xff1a;JZ4 二维数组中的查找题目描述&#xff1a;具体实现&#xff1a;JZ6 从尾到头打印链表题目描述&#xff1a;具体实现…

springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显

springboot文件上传&#xff0c;单文件上传和多文件上传项目结构及pom.xml创建文件表单页面编写javabean编写controller映射MultipartFile类RequestPart注解controller代码application.properties中的文件上传配置遍历数据显示页面运行显示项目结构及pom.xml pom.xml: <dep…

SQL用法详解补充

本文是对上次“SQL用法详解”的一些补充&#xff0c;一些基本操作可以点击链接查看 目录 一.对表结构的常用操作 查看表结构格式 修改表结构格式 1.修改列名和类型 2.修改添加列 3.修改表删除列 4.修改表名 5.数据删除 二.总结 三.实例 解决 完整代码 一.对表结构的常用操…

TIA博途中启用或禁用DP从站或PROFINET IO设备的具体方法

TIA博途中启用或禁用DP从站或PROFINET IO设备的具体方法 在实际项目中我们会遇到这样的问题, 例如:硬件组态中配置了一个控制器和3个 PN IO设备,但是最后只用到了2个PN IO设备,这样控制器一侧无法连接到第3个PN IO设备时,CPU会产生报警,PLC的Error指示灯会一直闪烁。 那么…

蓝桥杯2021省赛Python

蓝桥杯2021省赛Python 不得不说2021的比2020的难 1.卡片 很明显&#xff0c;最先没的肯定是1或者0&#xff0c;我们只要统计到谁会消耗2022个1或者0就好了 if __name__ __main__:res1 0res0 0for i in range(1,100000):i str(i)res1 i.count(1)res0 i.count(0)if res1…

[Rust笔记] 规则宏的“卫生保健”

规则宏代码的“卫生保健”规则宏mbe即是由macro_rules!宏所定义的宏。它的英文全称是Macro By Example。相比近乎“徒手攀岩”的Cpp模板元编程&#xff0c;rustc提供了有限的编译时宏代码检查功能&#xff08;名曰&#xff1a;Mixed Hygiene宏的混合保健&#xff09;。因为rust…

pointcovn 阅读笔记

各种点云采样算法 https://blog.csdn.net/weixin_41485242/article/details/107150963 Inverse Density 1.2 Inverse Density Importance Sampling (IDIS): 这个也比较好理解&#xff0c;简而言之就是根据每个点的密度来对其重新进行排序&#xff0c;尽可能地保留密度比较低的地…

python第九章 异常笔记

和Java类似程序运行有异常的时候&#xff0c;服务器会采用系统默认的异常处理机制&#xff1a;返回信息&#xff0c;终止程序。异常的类型&#xff1a;常见异常类型&#xff1a;1.NameError&#xff1a;访问了未定义的变量2.IndexError&#xff1a;越界访问3.AttributeError&am…

网络原理-网络发展史和通信基础

目录 1.网络发展史 面向终端的计算机网络 计算机网络阶段(局域网LAN) 组网方式 计算机网络互联阶段(广域网WAN) 2.通信基础 IP地址 端口号 网络协议 协议的作用 知名协议的默认端口 协议分层 分层的作用 OSI七层模型 TCP/IP五层模型 网络设备所在分层 网络分层…

《数据结构》八大排序和拓展的排序(详细教学并提供多种版本、动态图分析)

今天&#xff0c;我将带来数据结构的排序算法&#xff0c;排序算法作为校招中常考知识点之一&#xff0c;我们必须要熟练的掌握它,对自己提出高要求&#xff0c;才能有高回报。 目录排序的概念和应用内部排序和外部排序排序算法需要掌握的知识插入排序1.直接插入排序2.希尔排序…

【教程】Python实时检测CPU和GPU的功耗

目录 前言 GPU功耗检测方法 CPU功耗检测方法 sudo的困扰与解决 完整功耗分析示例代码 转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 前言 相关一些检测工具挺多的&#xff0c;比如powertop、powerstat、s-tui等。但如何通过代码的方式来实时检测&#xf…

Unsafe Fileupload-基础篇(文件上传绕过技巧与upload-labs靶场)

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 文件上传基础 01 什么是文件上传 02 文件上传产生漏洞的原因 03 文件上传漏洞危害 0…

济人药业更新招股书:计划在A股上市,中成药业务收入持续下滑

近日&#xff0c;安徽济人药业股份有限公司&#xff08;下称“济人药业”&#xff09;递交预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;济人药业于2022年7月1日递交上市申请&#xff0c;此次更新了截至2022年6月30日的财务数据等信息…

Android深入系统完全讲解(42)

红色部分 pc 000007cc 代表当前 pc 指向的位置。libnative-lib.so 代表在哪个库里面。于是我 们就需要知道&#xff0c;libnative-lib.so 库的 pc 000007cc 偏移位置&#xff0c;是个什么代码。 我们从 NDK 开发包中找到 D:\android-ndk-r19c\toolchains\arm-linux-androideabi…

远程控制软件

远程控制软件1. 概述2. TeamViewer3. Todesk4. 向日葵5. AnyDesk6. Splashtop结束语1. 概述 出门在外或者工作时突然需要访问家中的电脑拿取文件或者资料时&#xff0c;是直接跑回家拿去、还是委托家里人员帮忙呢&#xff1f; 这时候你就需要一类软件来完成这个任务了&#xf…

前端图片压缩方案及代码实现

1. 为什么要进行图片压缩? 随着互联网的发展&#xff0c;图片在各种网站和应用中铺天盖地&#xff0c;运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小&#xff0c;随之产生的带宽和服务器容量也大大增加&#xff0c;图片压缩的需求随之产生。 常见的压缩图片的…