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

理解进程和线程的概念

在操作系统中,进程线程都是执行的基本单位,但它们在性质和管理方面有所不同

进程

  • 定义: 进程是一个正在运行的程序的实例,是操作系统资源分配的基本单位。
  • 特点:
    • 独立性:每个进程有其独立的内存空间、数据栈和其他辅助数据。
    • 重量级:创建和管理进程需要较多的资源,相对较慢。
    • 进程间通信(IPC)通常复杂。

线程

  • 定义: 线程是进程中的一个执行流,是操作系统调度的基本单位。
  • 特点:
    • 轻量级:线程间切换比进程切换快,因为它们共享同一进程的内存和资源。
    • 共享性:同属一个进程的线程可以直接访问进程的内存空间。
    • 适合并行操作,提升性能。

在Linux系统下执行命令

1. 查看进程编号 (PID)

在Linux系统中,你可以使用ps -a命令来查看当前系统中所有进程的编号(PID)。

ps -a

2. 终止一个进程

使用kill命令可以终止指定的进程,你需要知道你想要终止的进程的PID。例如,如果你要终止PID为1234的进程,可以执行以下命令:

kill 1234

Linux的虚拟内存管理

虚拟内存管理

虚拟内存是操作系统提供的一种内存管理功能,它允许程序使用比实际物理内存大得多的内存空间。它的基本特性包括:

  • 地址空间: 每个进程都被分配一个独立的虚拟地址空间,这样不同进程之间的内存不会相互干扰。
  • 分页: 内存被分割成固定大小的页面,操作系统通过页面映射将虚拟地址转换为物理地址,允许程序在需要时加载或释放内存。

真实物理内存(内存映射)

在STM32等微控制器中,真实物理内存是直接可用的、预先分配的内存地址。这种内存通常是固定的,且没有动态分配的概念——每个外设和存储器都有其物理地址。在STM32中,内存映射允许程序直接访问硬件寄存器。

区别

  • 地址空间: 虚拟内存使每个进程拥有独立的地址空间,而真实物理内存是共享的。
  • 管理方式: 虚拟内存支持动态管理,制定和回收内存,而物理内存采用静态分配。
  • 灵活性: 虚拟内存有助于内存保护和简化内存管理,而真实物理内存由于简单直接,通常响应速度更快。

理解Linux系统调用函数

在Linux中,系统调用是程序与操作系统内核进行交互的主要方式。常见的系统调用包括fork()wait()exec()等。

1. fork()

  • 功能: 创建一个新的进程,称为子进程。它是父进程的副本。
  • 调用:
#include <unistd.h>
pid_t pid = fork();
if (pid == -1) {// 错误处理
} else if (pid == 0) {// 子进程代码
} else {// 父进程代码
}

2. wait()

  • 功能: 使父进程等待子进程的结束。
  • 调用:
#include <sys/types.h>
#include <sys/wait.h>
wait(NULL);  // 等待任意子进程结束

3. exec()

  • 功能: 用新程序替换当前进程。
  • 调用:
#include <unistd.h>
execlp("ls", "ls", NULL);  // 执行ls命令

在阿里云服务器上编写C代码

  1. 远程登录: 使用Putty或Xterminal等工具,远程登录到分配的阿里云服务器Ubuntu系统。
  2. 创建目录:
mkdir ~/my_job
cd ~/my_job
  1. 使用Vi编辑器创建C文件:
vi example.c

在示例代码中你可以尝试以下内容(作为fork、wait和exec的例子):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main() {pid_t pid = fork();if (pid < 0) {perror("Fork failed");exit(1);} else if (pid == 0) {// 子进程execlp("ls", "ls", NULL);perror("Exec failed");  // 如果exec失败,程序会继续执行exit(1);} else {// 父进程wait(NULL);  // 等待子进程结束printf("Child finished\n");}return 0;
}
  1. 编译和运行:
gcc example.c -o example
./example

总结

通过实践对进程、线程、虚拟内存管理及Linux系统调用有了更深入的理解。这些知识是操作系统和计算机科学的基础,对于后续的编程和系统设计至关重要。希望大家能通过不断的练习掌握这些概念,并应用于实际项目中。

相关文章:

理解进程和线程的概念

在操作系统中&#xff0c;进程和线程都是执行的基本单位&#xff0c;但它们在性质和管理方面有所不同 进程 定义: 进程是一个正在运行的程序的实例&#xff0c;是操作系统资源分配的基本单位。特点: 独立性&#xff1a;每个进程有其独立的内存空间、数据栈和其他辅助数据。重…...

铰链损失函数 Hinge Loss和Keras 实现

一、说明 在为了了解 Keras 深度学习框架的来龙去脉&#xff0c;本文介绍铰链损失函数&#xff0c;然后使用 Keras 实现它们以进行练习并了解它们的行为方式。在这篇博客中&#xff0c;您将首先找到两个损失函数的简要介绍&#xff0c;以确保您在我们继续实现它们之前直观地理解…...

瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战

近日&#xff0c;瑞数信息正式发布《BOTS自动化威胁报告》&#xff0c;力求通过全景式观察和安全威胁的深度分析&#xff0c;为企业在AI时代下抵御自动化攻击提供安全防护策略&#xff0c;从而降低网络安全事件带来的影响&#xff0c;进一步增强业务韧性和可持续性。 威胁一&am…...

树莓派llama.cpp部署DeepSeek-R1-Distill-Qwen-1.5B

树莓派的性能太低了&#xff0c;我们需要对模型进行量化才能使用&#xff0c;所以现在的方案是&#xff0c;在windows上将模型格式和量化处理好&#xff0c;然后再将模型文件传输到树莓派上。而完成上面的操作就需要部署llama.cpp。 三、环境的准备 这里要求大家准备…...

小菜Go:Ubuntu下Go语言开发环境搭建

前置要求Ubuntu环境搭建 文章推荐 此处推荐一个比较好的文章&#xff0c;基本按部就班就欧克~ 安装虚拟机&#xff08;VMware&#xff09;保姆级教程&#xff08;附安装包&#xff09;_vmware虚拟机-CSDN博客 安装可能遇到的问题 虚拟机安装遇到的问题如&#xff1a;Exception…...

FLV格式:流媒体视频的经典选择

FLV格式&#xff1a;流媒体视频的经典选择 FLV&#xff08;Flash Video&#xff09;格式曾经是流媒体视频的主力军&#xff0c;在互联网视频的早期时代广泛应用于视频网站和多媒体平台。凭借其高效的压缩和较小的文件体积&#xff0c;FLV成为了许多视频内容创作者和平台的首选…...

需求分析-用例图绘制、流程图绘制

第一&#xff0c;引论 需求分析是开发的第一步&#xff0c;也是我个人认为最重要的一步。 技术难题的克服&#xff0c;甚至在我心里&#xff0c;还要排在需求分析后面。 如果需求分析做好了&#xff0c;数据库就更容易建立&#xff0c;数据库建好了&#xff0c;业务逻辑写起…...

Windows安装 PHP 8 和mysql9,win下使用phpcustom安装php8.4.5和mysql9

百度搜索官网并下载phpcustom&#xff0c;然后启动环境&#xff0c;点击网站管理 里面就有php8最新版&#xff0c;可以点mysql设置切mysql9最新版&#xff0c;如果你用最新版无法使用&#xff0c;说明你的php程序不支持最新版的mysql MySQL 9.0 引入了一些新的 SQL 模式和语法变…...

http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戏

文章目录 题目深搜代码宽搜代码深搜数据演示图总结 题目 1804:小游戏 总时间限制: 1000ms 内存限制: 65536kB 描述 一天早上&#xff0c;你起床的时候想&#xff1a;“我编程序这么牛&#xff0c;为什么不能靠这个赚点小钱呢&#xff1f;”因此你决定编写一个小游戏。 游戏在一…...

手写JSX实现虚拟DOM

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

Spring Boot 中的 Bean

2025/4/6 向全栈工程师迈进&#xff01; 一、Bean的扫描 在之前&#xff0c;对于Bean的扫描&#xff0c;我们可以在XML文件中书写标签&#xff0c;来指定要扫描的包路径&#xff0c;如下所示,可以实通过如下标签的方式&#xff1a; <context:component-scan base-package&…...

C++17更新内容汇总

C17 是 C14 的进一步改进版本&#xff0c;它引入了许多增强特性&#xff0c;优化了语法&#xff0c;并提升了编译期计算能力。以下是 C17 的主要更新内容&#xff1a; 1. 结构化绑定&#xff08;Structured Bindings&#xff09; 允许同时解构多个变量&#xff0c;从 std::tup…...

ST 芯片架构全景速览:MCU、无线 SoC、BLE 模块、MPU 差异详解

在嵌入式开发中,ST 是一个非常常见的芯片厂商,其产品线覆盖了 MCU、无线芯片、BLE 模块以及运行 Linux 的 MPU 等多个领域。很多开发者初次接触 ST 时会对这些产品之间的关系感到困惑。 本文从分类视角出发,带你快速了解 ST 芯片家族的核心架构和主要用途。 🧭 ST 芯片四…...

AtCoder Beginner Contest 400(ABCDE)

A - ABC400 Party 翻译&#xff1a; 在 ABC400 的纪念仪式上&#xff0c;我们想把 400 人排成 A 行 B 列的长方形&#xff0c;且不留任何空隙。 给你一个正整数 A&#xff0c;请打印可以这样排列的正整数 B 的值。如果没有这样的正整数 B&#xff0c;则打印-1。 思路&#xff…...

Flask+Vue构建图书管理系统及Echarts组件的使用

教程视频链接从零开始FlaskVue前后端分离图书管理系统 后端 项目下载地址 其中venv为该项目的虚拟环境&#xff0c;已安装所有依赖 使用方法&#xff1a; 在pycharm终端中flask create一下&#xff08;因为写了一个自定义命令的代码&#xff09;&#xff0c;初始化books数据…...

【项目管理】第2章 信息技术发展 --知识点整理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 对应:第1章-第5章 (二)知识笔记 二、信息技术的发展 1. 信息技术及其发展 1)计算机软硬件 计算机硬件由电子机械、光电元件等组成的物理装置,提供物质基础给计算机软件运行。软件包括程…...

Spring 中有哪些设计模式?

&#x1f9e0; 一、Spring 中常见的设计模式 设计模式类型Spring 中的应用场景单例模式创建型默认 Bean 是单例的工厂模式创建型BeanFactory、FactoryBean抽象工厂模式创建型ApplicationContext 提供多个工厂接口代理模式结构型AOP 动态代理&#xff08;JDK/CGLIB&#xff09;…...

4-c语言中的数据类型

一.C 语⾔中的常量 1.生活中的数据 整数&#xff1a; 100,200,300,400,500 小数: 11.11 22.22 33.33 字母&#xff1a; a&#xff0c;b&#xff0c;c&#xff0c;d A&#xff0c;B&#xff0c;C&#xff0c;D 在 C 语⾔中我们把字⺟叫做字符. 字符⽤单引号引⽤。例如A’ 单词…...

LORA+llama模型微调全流程

LORAllama.cpp模型微调全流程 准备阶段 1.下载基础大模型 新建一个download.py脚本 from modelscope import snapshot_download#模型存放路径 model_path /root/autodl-tmp #模型名字 name itpossible/Chinese-Mistral-7B-Instruct-v0.1 model_dir snapshot_download(na…...

02_使用Docker在服务器上部署Jekins实现项目的自动化部署

02_使用Docker在服务器上部署jenkins实现项目的自动化部署 一、使用docker拉取阿里云容器私有镜像仓库内的jenkins镜像 登录阿里云Docker Registry $ sudo docker login --usernamewxxxo1xxx registry.cn-shanghai.aliyuncs.com用于登录的用户名为阿里云账号全名&#xff0c…...

Spring 执行流程(源码)

我们对SpringApplication中的run()方法内部进行一些简单的分析 1. //记录一下程序启动开始的事件&#xff0c;用于之后的统计耗时 long startTime System.nanoTime(); //通过调用SpringApplication的**createBootstrapContext()**方法&#xff0c;创建**bootstrapContext**…...

Python学习之numpy

Python学习之numpy 数组是Numpy库的核心数据结构。 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric&#xff0c;即 NumPy 的前身&#xff0c;是由 Jim Hugunin 开发的。 也开发了另一个包 Numarr…...

安装完 miniconda3 ,cmd无法执行 conda 命令

提示&#xff1a;安装 miniconda3 文章目录 前言一、安装二、安装完&#xff0c;cmd 无法执行 conda 前言 提示&#xff1a;版本 系统&#xff1a;win10 codna: miniconda3 安装完 miniconda3 &#xff0c;cmd无法执行 conda 命令 提示&#xff1a;以下是本篇文章正文内容&am…...

PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一个适用于图像输入的多头注意力机制&#xff08;Multi-Head Attention&#xff09;PyTorch 实现&#xff0c;适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C)&#xff0c;其中 N H * W多头注…...

从 Credit Metrics 到 CPV:现代信用风险模型的进化与挑战

文章目录 一、信用风险基础二、Credit Risk 模型核心思想关键假设模型框架实施步骤优缺点适用场景 三、Credit Metrics 模型核心思想关键假设模型框架实施步骤优缺点适用场景 四、Credit Portfolio View 模型核心思想关键假设模型框架实施步骤优缺点适用场景 五、总结 一、信用…...

Docker快速安装MongoDB并配置主从同步

目录 一、创建相关目录及授权 二、下载并运行MongoDB容器 三、配置主从复制 四、客户端远程连接 五、验证主从同步 六、停止和恢复复制集 七、常用命令 一、创建相关目录及授权 创建主节点mongodb数据及日志目录并授权 mkdir -p /usr/local/mongodb/mongodb1/data mkdir …...

Kafka 中的事务

Kafka 中的 事务&#xff08;Transactions&#xff09; 是为了解决 消息处理的原子性和幂等性问题&#xff0c;确保一组消息要么全部成功写入、要么全部失败&#xff0c;不出现中间状态或重复写入。事务机制尤其适合于 “精确一次&#xff08;Exactly-Once&#xff09;” 的处理…...

C++ 内存访问模式优化:从架构到实践

内存架构概览&#xff1a;CPU 与内存的 “速度博弈” 层级结构&#xff1a;从寄存器到主存 CPU 堪称计算的 “大脑”&#xff0c;然而它与内存之间的速度差距&#xff0c;宛如高速公路与乡间小路。现代计算机借助多级内存体系来缓和这一矛盾&#xff0c;其核心思路是&#xf…...

Golang系列 - 内存对齐

Golang系列-内存对齐 常见类型header的size大小内存对齐空结构体类型参考 摘要: 本文将围绕内存对齐展开, 包括字符串、数组、切片等类型header的size大小、内存对齐、空结构体类型的对齐等等内容. 关键词: Golang, 内存对齐, 字符串, 数组, 切片 常见类型header的size大小 首…...

SOMEIP通信矩阵解读

目录 1 摘要2 SOME/IP通信矩阵详细属性定义与示例2.1 服务基础属性2.2 数据类型定义2.3 服务实例与网络配置参数2.4 SOME/IP-SD Multicast 配置&#xff08;SOME/IP服务发现组播配置&#xff09;2.5 SOME/IP-SD Unicast 配置2.6 SOME/IP-SD ECU 配置参数详解 3 总结 1 摘要 本…...