理解进程和线程的概念
在操作系统中,进程和线程都是执行的基本单位,但它们在性质和管理方面有所不同
进程
- 定义: 进程是一个正在运行的程序的实例,是操作系统资源分配的基本单位。
- 特点:
- 独立性:每个进程有其独立的内存空间、数据栈和其他辅助数据。
- 重量级:创建和管理进程需要较多的资源,相对较慢。
- 进程间通信(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代码
- 远程登录: 使用Putty或Xterminal等工具,远程登录到分配的阿里云服务器Ubuntu系统。
- 创建目录:
mkdir ~/my_job
cd ~/my_job
- 使用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;
}
- 编译和运行:
gcc example.c -o example
./example
总结
通过实践对进程、线程、虚拟内存管理及Linux系统调用有了更深入的理解。这些知识是操作系统和计算机科学的基础,对于后续的编程和系统设计至关重要。希望大家能通过不断的练习掌握这些概念,并应用于实际项目中。
相关文章:
理解进程和线程的概念
在操作系统中,进程和线程都是执行的基本单位,但它们在性质和管理方面有所不同 进程 定义: 进程是一个正在运行的程序的实例,是操作系统资源分配的基本单位。特点: 独立性:每个进程有其独立的内存空间、数据栈和其他辅助数据。重…...
铰链损失函数 Hinge Loss和Keras 实现
一、说明 在为了了解 Keras 深度学习框架的来龙去脉,本文介绍铰链损失函数,然后使用 Keras 实现它们以进行练习并了解它们的行为方式。在这篇博客中,您将首先找到两个损失函数的简要介绍,以确保您在我们继续实现它们之前直观地理解…...
瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战
近日,瑞数信息正式发布《BOTS自动化威胁报告》,力求通过全景式观察和安全威胁的深度分析,为企业在AI时代下抵御自动化攻击提供安全防护策略,从而降低网络安全事件带来的影响,进一步增强业务韧性和可持续性。 威胁一&am…...
树莓派llama.cpp部署DeepSeek-R1-Distill-Qwen-1.5B
树莓派的性能太低了,我们需要对模型进行量化才能使用,所以现在的方案是,在windows上将模型格式和量化处理好,然后再将模型文件传输到树莓派上。而完成上面的操作就需要部署llama.cpp。 三、环境的准备 这里要求大家准备…...
小菜Go:Ubuntu下Go语言开发环境搭建
前置要求Ubuntu环境搭建 文章推荐 此处推荐一个比较好的文章,基本按部就班就欧克~ 安装虚拟机(VMware)保姆级教程(附安装包)_vmware虚拟机-CSDN博客 安装可能遇到的问题 虚拟机安装遇到的问题如:Exception…...
FLV格式:流媒体视频的经典选择
FLV格式:流媒体视频的经典选择 FLV(Flash Video)格式曾经是流媒体视频的主力军,在互联网视频的早期时代广泛应用于视频网站和多媒体平台。凭借其高效的压缩和较小的文件体积,FLV成为了许多视频内容创作者和平台的首选…...
需求分析-用例图绘制、流程图绘制
第一,引论 需求分析是开发的第一步,也是我个人认为最重要的一步。 技术难题的克服,甚至在我心里,还要排在需求分析后面。 如果需求分析做好了,数据库就更容易建立,数据库建好了,业务逻辑写起…...
Windows安装 PHP 8 和mysql9,win下使用phpcustom安装php8.4.5和mysql9
百度搜索官网并下载phpcustom,然后启动环境,点击网站管理 里面就有php8最新版,可以点mysql设置切mysql9最新版,如果你用最新版无法使用,说明你的php程序不支持最新版的mysql MySQL 9.0 引入了一些新的 SQL 模式和语法变…...
http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戏
文章目录 题目深搜代码宽搜代码深搜数据演示图总结 题目 1804:小游戏 总时间限制: 1000ms 内存限制: 65536kB 描述 一天早上,你起床的时候想:“我编程序这么牛,为什么不能靠这个赚点小钱呢?”因此你决定编写一个小游戏。 游戏在一…...
手写JSX实现虚拟DOM
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
Spring Boot 中的 Bean
2025/4/6 向全栈工程师迈进! 一、Bean的扫描 在之前,对于Bean的扫描,我们可以在XML文件中书写标签,来指定要扫描的包路径,如下所示,可以实通过如下标签的方式: <context:component-scan base-package&…...
C++17更新内容汇总
C17 是 C14 的进一步改进版本,它引入了许多增强特性,优化了语法,并提升了编译期计算能力。以下是 C17 的主要更新内容: 1. 结构化绑定(Structured Bindings) 允许同时解构多个变量,从 std::tup…...
ST 芯片架构全景速览:MCU、无线 SoC、BLE 模块、MPU 差异详解
在嵌入式开发中,ST 是一个非常常见的芯片厂商,其产品线覆盖了 MCU、无线芯片、BLE 模块以及运行 Linux 的 MPU 等多个领域。很多开发者初次接触 ST 时会对这些产品之间的关系感到困惑。 本文从分类视角出发,带你快速了解 ST 芯片家族的核心架构和主要用途。 🧭 ST 芯片四…...
AtCoder Beginner Contest 400(ABCDE)
A - ABC400 Party 翻译: 在 ABC400 的纪念仪式上,我们想把 400 人排成 A 行 B 列的长方形,且不留任何空隙。 给你一个正整数 A,请打印可以这样排列的正整数 B 的值。如果没有这样的正整数 B,则打印-1。 思路ÿ…...
Flask+Vue构建图书管理系统及Echarts组件的使用
教程视频链接从零开始FlaskVue前后端分离图书管理系统 后端 项目下载地址 其中venv为该项目的虚拟环境,已安装所有依赖 使用方法: 在pycharm终端中flask create一下(因为写了一个自定义命令的代码),初始化books数据…...
【项目管理】第2章 信息技术发展 --知识点整理
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 对应:第1章-第5章 (二)知识笔记 二、信息技术的发展 1. 信息技术及其发展 1)计算机软硬件 计算机硬件由电子机械、光电元件等组成的物理装置,提供物质基础给计算机软件运行。软件包括程…...
Spring 中有哪些设计模式?
🧠 一、Spring 中常见的设计模式 设计模式类型Spring 中的应用场景单例模式创建型默认 Bean 是单例的工厂模式创建型BeanFactory、FactoryBean抽象工厂模式创建型ApplicationContext 提供多个工厂接口代理模式结构型AOP 动态代理(JDK/CGLIB)…...
4-c语言中的数据类型
一.C 语⾔中的常量 1.生活中的数据 整数: 100,200,300,400,500 小数: 11.11 22.22 33.33 字母: a,b,c,d A,B,C,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用于登录的用户名为阿里云账号全名,…...
Spring 执行流程(源码)
我们对SpringApplication中的run()方法内部进行一些简单的分析 1. //记录一下程序启动开始的事件,用于之后的统计耗时 long startTime System.nanoTime(); //通过调用SpringApplication的**createBootstrapContext()**方法,创建**bootstrapContext**…...
Python学习之numpy
Python学习之numpy 数组是Numpy库的核心数据结构。 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarr…...
安装完 miniconda3 ,cmd无法执行 conda 命令
提示:安装 miniconda3 文章目录 前言一、安装二、安装完,cmd 无法执行 conda 前言 提示:版本 系统:win10 codna: miniconda3 安装完 miniconda3 ,cmd无法执行 conda 命令 提示:以下是本篇文章正文内容&am…...
PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)
本文提供一个适用于图像输入的多头注意力机制(Multi-Head Attention)PyTorch 实现,适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C),其中 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 中的 事务(Transactions) 是为了解决 消息处理的原子性和幂等性问题,确保一组消息要么全部成功写入、要么全部失败,不出现中间状态或重复写入。事务机制尤其适合于 “精确一次(Exactly-Once)” 的处理…...
C++ 内存访问模式优化:从架构到实践
内存架构概览:CPU 与内存的 “速度博弈” 层级结构:从寄存器到主存 CPU 堪称计算的 “大脑”,然而它与内存之间的速度差距,宛如高速公路与乡间小路。现代计算机借助多级内存体系来缓和这一矛盾,其核心思路是…...
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 配置(SOME/IP服务发现组播配置)2.5 SOME/IP-SD Unicast 配置2.6 SOME/IP-SD ECU 配置参数详解 3 总结 1 摘要 本…...
