【Linux学习笔记】初识进程概念和进程PCB

【Linux学习笔记】初识冯诺依曼体系和进程PCB

🔥个人主页大白的编程日记

🔥专栏Linux学习笔记


文章目录

  • 【Linux学习笔记】初识冯诺依曼体系和进程PCB
    • 前言
    • [一. 冯诺依曼体系结构](#一. 冯诺依曼体系结构)
      • [1.1 关于冯诺依曼体系的要点:](#1.1 关于冯诺依曼体系的要点:)
    • [二. 操作系统(Operating System)](#二. 操作系统(Operating System))
      • [2.1 概念](#2.1 概念)
      • [2.2 设计OS的目的](#2.2 设计OS的目的)
      • [2.3 核心功能](#2.3 核心功能)
      • [2.4 如何理解"管理"](#2.4 如何理解“管理”)
      • [2.5 系统调用和库函数概念](#2.5 系统调用和库函数概念)
    • [三. 进程](#三. 进程)
      • [3.1 基本概念与基本操作](#3.1 基本概念与基本操作)
        • [3.1.2 描述进程 - PCB](#3.1.2 描述进程 - PCB)
        • [3.1.3 task_struct](#3.1.3 task_struct)
        • [3.1.5 查看进程](#3.1.5 查看进程)
        • [3.1.6 通过系统调用获取进程标识符](#3.1.6 通过系统调用获取进程标识符)
        • [3.1.7 通过系统调用创建进程 - `fork`初识](#3.1.7 通过系统调用创建进程 - fork初识)
    • 后言

前言

哈喽,各位小伙伴大家好!上期我们讲了gdb和cgdb 今天我们讲的是初识冯诺依曼体系和进程PCB。话不多说,我们进入正题!向大厂冲锋!

一. 冯诺依曼体系结构

我们常见的计算机,如笔记本,以及不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。计算机由以下硬件组件组成:

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

1.1 关于冯诺依曼体系的要点:

  • 存储器指的是内存
  • CPU只能对内存进行读写,不能直接访问外设(输入或输出设备)
  • 外设要输入或输出数据,只能通过内存进行交互
  • 所有设备都只能直接和内存打交道

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

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

📌 注意:

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的消息之后的数据流动过程。如果是在qq上发送文件呢?

二. 操作系统(Operating System)

2.1 概念

操作系统(OS)是计算机系统中一个基本的程序集合,包括:

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

2.2 设计OS的目的

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


2.3 核心功能

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

2.4 如何理解"管理"

  • 管理的例子:学生、辅导员、校长
  • 描述被管理对象
  • 组织被管理对象

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

2.5 系统调用和库函数概念

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

承上启下

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

三. 进程

3.1 基本概念与基本操作

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间、内存)的实体
3.1.2 描述进程 - PCB
  1. 基本概念
  • 进程信息被放在一个叫做进程控制块(PCB)的数据结构中,是进程属性的集合
  • 课本上称之为PCB(processcontrolblock),在Linux操作系统下的PCB是:task_struct
  1. task_struct-PCB的一种
  • 在Linux中描述进程的结构体叫做task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。
3.1.3 task_struct
  1. 内容分类:
  • 标示符:描述本进程的唯一标示符,用来区别其他进程。
  • 状态:任务状态,退出代码,退出信号等。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据:进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/0状态信息:包括显示的I/O请求,分配给进程的I/0设备和被进程使用的文件列表。
  • 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息
  • 具体详细信息后续会介绍
  1. 组织进程
    所有运行在系统里的进程都以task_struct链表的形式存在于内核中。
3.1.5 查看进程
  1. 进程信息可以通过/proc系统文件夹查看。例如,获取PID为1的进程信息,查看/proc/1文件夹。
  2. 大多数进程信息也可以通过topps等用户级工具获取。
3.1.6 通过系统调用获取进程标识符
  • 进程id(PID)
  • 父进程id(PPID)
c 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    printf("pid: %d\n", getpid());
    printf("ppid: %d\n", getppid());
    return 0;
}


3.1.7 通过系统调用创建进程 - fork初识
  • 运行 man fork 认识fork
  • fork有两个返回值:
  1. 父进程返回值为子进程的PID
  2. 子进程返回值为0
c 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    int ret = fork();
    printf("hello proc : %d!, ret: %d\n", getpid(), ret);
    sleep(1);
    return 0;
}
  • fork之后通常使用if分流
c 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    int ret = fork();
    if(ret < 0){
        perror("fork");
        return 1;
    }
    else if(ret == 0){ // child
        printf("I am child : %d!, ret: %d\n", getpid(), ret);
    }
    else{ // father
        printf("I am father : %d!, ret: %d\n", getpid(), ret);
    }
    sleep(1);
    return 0;
}

后言

这就是初识冯诺依曼体系和进程PCB。大家自己好好消化!今天就分享到这! 感谢各位的耐心垂阅!咱们下期见!拜拜~

相关推荐
ab_dg_dp20 分钟前
解决Ubuntu系统鼠标不流畅的问题
linux·ubuntu·计算机外设
honey ball41 分钟前
EMC内参二(1-33页)学习【技术进阶】
开发语言·单片机·嵌入式硬件·学习
郭涤生1 小时前
Chapter 7: Compiling C++ Sources with CMake_《Modern CMake for C++》_Notes
c++·笔记·软件构建
理智的煎蛋1 小时前
es 原生linux部署集群
大数据·linux·服务器·elasticsearch
阿巴阿巴拉1 小时前
Scala相关知识学习总结5
开发语言·学习·scala
nzxzn1 小时前
linux第三次作业
linux·运维·服务器
海风极客1 小时前
怎样读懂top命令?
linux·后端·程序员
chairon1 小时前
Ansible:playbook的高级用法
linux·运维·服务器·ansible·apache
丶Darling.2 小时前
深度学习与神经网络 | 邱锡鹏 | 第四章学习笔记 神经网络
深度学习·神经网络·学习
Protein_zmm2 小时前
[Linux系统编程]多线程
java·linux·jvm