【Linux】深入理解进程(一)

文章目录

冯诺依曼结构

我们常见的计算机,手机,服务器都是遵循冯诺依曼结构,

硬件

存储器:内存

外设

  • 输入设备: 键盘,鼠标,摄像头,声卡,磁盘,网卡
  • 输出设备:显示器,播放器,磁盘,网卡

CPU

  • 运算器:对数据进行计算(逻辑计算,算术计算)
  • 控制器:对硬件流程进行控制


从上到下,离CPU越来越远,

内存存在意义?
如果没有内存,输入设备存储效率太慢了,CPU存储速度又太快了,输出设备存储效率又太慢了,一套流程下来,时间全用来等待数据传输了。

🚩内存:

硬件级别的缓存空间,处于核心地位

用来缓冲,内存存储效率较快,输入设备把数据先给内存,内存再和硬盘交互

程序进度条

c 复制代码
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main()
{
    int n=11;
    while(n--)
    {
        printf("\r%-2d",n);
        sleep(1);
    }
    return 0;
}

为什么不是1秒打印1个数,而是10秒后全部打印出来了?

答:进缓存了,在内存缓存

解决方法:刷新显示器

c 复制代码
        printf("\r%-2d",n);
        sleep(1);
        fflush(stdout);

冷知识:
回车代表的是回到当前行开头,是老式打字机那样

我们键盘的回车键,实际上是换行加回车

我们C语言的/n实际上是换行加回车,/n自动刷新显示器

C++的endl也是自动刷新显示器了

强调

  • 不考虑缓存情况,这里CPU不能访问输入设备和输出设备,只能对内存进行读写
  • 外设要输入输出数据,也只能从内存中获取
  • 所有人都只能和内存打交道

软件数据流程理解

比如我打开qq和朋友聊天,就会经历两次冯诺依曼

我:键盘-> 输入文字 ->显示器+网卡
朋友:网卡 -> 缓存 -> 显示器

操作系统

概念

每个计算机都包括一个基本程序集合,称为操作系统,简单理解:分为两部分

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

🚩是什么

操作系统是一款管理软硬件资源的软件

🚩为什么管理

1,帮助用户管理好软硬件资源

2,给用户一个良好稳定安全高效的运行环境

怎么管理

操作系统要管理软硬件资源,🚩注定了里面存在大量的数据

🚩
操作系统不信任用户!,操作系统为了保证数据安全,以接口形式让用户访问内部数据
接口是操作系统用C语言写的,自己内部的函数调用------系统调用

所有访问操作系统的行为,都只能通过系统调用完成

库函数和系统调用:
是上下级的关系,比如printf就属于库函数lib

比如:怎么管理一个学校学生数据

先描述:

c 复制代码
struct student
{
      char* name;
      int age;
      //----
      struct student* next;
}

再管理:
用链表把每个学生串联起来即可

承上启下

操作系统怎么把进程管理起来?

答:先把进程描述出来,再把进程组织起来

进程

概念

一个已经加载到内存中的程序,一个正在运行的程序

🚩描述进程------PCB

描述进程的属性的集合,课本上叫做PCB,
在Linux中,描述进程属性task_struct结构体,task_struct是PCB的一种

task_struct会被加载到内存中,与代码数据共同形成进程
管理进程,也就是把一个个task_struct单链接起来,增删查改,我们不管理代码数据,只关注属性,
进程= task_struct + 代码加数据

查看进程

ls /proc/id
ps axj | grep 文件名 | grep -v grep

持续打印进程

while :; do ps axj | head -1 && ps axj| grep 文件名 | grep -v grep; sleep 1;done

系统调用获取进程符

getpid()获取进程id

getppid()获取父进程id

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;
 }
相关推荐
咩咩啃树皮4 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
炸膛坦客5 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
爱写代码的森5 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
旖-旎5 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
鱟鲥鳚5 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
Henry Zhu1235 小时前
C++中的特殊成员函数与智能指针
c++
大模型码小白6 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司7 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
大耳朵-小飞象7 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技8 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造