当前位置: 首页 > news >正文

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

文章目录

  • 冯诺依曼结构
    • 硬件
    • 🚩内存:
    • 强调
    • 软件数据流程理解
  • 操作系统
    • 概念
    • 🚩是什么
    • 🚩为什么管理
    • 怎么管理
  • 承上启下
  • 进程
    • 概念
    • 🚩描述进程——PCB
  • 查看进程
    • 系统调用获取进程符

冯诺依曼结构

在这里插入图片描述
我们常见的计算机,手机,服务器都是遵循冯诺依曼结构,

硬件

存储器:内存
外设

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

CPU

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

在这里插入图片描述
从上到下,离CPU越来越远,

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

🚩内存:

硬件级别的缓存空间,处于核心地位
用来缓冲内存存储效率较快输入设备把数据先给内存,内存再和硬盘交互

程序进度条

#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秒后全部打印出来了?
答:进缓存了,在内存缓存

解决方法:刷新显示器

        printf("\r%-2d",n);sleep(1);fflush(stdout);

冷知识
回车代表的是回到当前行开头,是老式打字机那样
我们键盘的回车键实际上是换行加回车
我们C语言的/n实际上是换行加回车/n自动刷新显示器
C++的endl也是自动刷新显示器了

强调

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

软件数据流程理解

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

我:键盘-> 输入文字 ->显示器+网卡
朋友:网卡 -> 缓存 -> 显示器
在这里插入图片描述

操作系统

概念

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

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

🚩是什么

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

🚩为什么管理

1,帮助用户管理好软硬件资源
2,给用户一个良好稳定安全高效的运行环境

怎么管理

在这里插入图片描述
操作系统要管理软硬件资源,🚩注定了里面存在大量的数据

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

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

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

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

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

#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;}
http://www.dtcms.com/a/507905.html

相关文章:

  • 基于单片机的车辆超载报警系统设计及人数检测设计
  • 防止网站被克隆dedecms 网站地图插件
  • 做网站与网店运营263企业邮箱pop3设置
  • 解释 Python 的 GIL(全局解释器锁)机制及其对多线程的影响。
  • Conda_bashrc 初始化机制学习笔记
  • 用dw制作购物网站首页WordPress空间换到万网
  • Spring 4.0新特性全面解析
  • 世界之窗附近做网站公司门户网站的营销特点
  • neo4j密码忘记如何解决
  • React + TypeScript 企业级编码规范指南
  • React Router 路由模式详解:HashRouter vs BrowserRouter
  • 福田做网站怎么样下载网站模板
  • 每日一个C语言知识:C 结构体
  • 淘宝网中国站电脑版登录辽宁省建设工程招投标
  • sql数据库语法
  • 使用jmeter进行压力测试
  • 长期网站外包wordpress主题php详解
  • 面试八股 快速讲解 集合类中的 fail-fast和fail-safe
  • MySQL K8S日志分析与数据还原
  • RK3588 RKLLM大语言模型AI开发环境搭建及板端部署
  • Android Studio配置指南:Gradle 安装
  • php能做手机网站吗网站开发 例子
  • 【完整源码+数据集+部署教程】【零售和消费品&存货】快递包裹条形码与二维码识别系统源码&数据集全套:改进yolo11-RFCBAMConv
  • 泉州seo建站wordpress 生成 应用
  • BearPi小熊派 鸿蒙开发入门笔记(3)
  • 欧几里得算法(Euclidean Algorithm):求最大公约数的经典方法
  • MLLM技术报告 核心创新一览
  • C++设计模式_行为型模式_策略模式Strategy
  • **发散创新:多智能体系统的探索与实践**随着人工智能技术的飞速发展,多智能体系统作为当今研究的热点领域,正受到越来越多关注
  • 音乐网站设计企业网络搭建与应用