Linux小课堂: 系统硬件资源管理与设备操作指南

操作系统实践入门:从进程管理到系统调用,掌握Linux+C核心实验 操作系统是计算机系统的核心软件,负责管理硬件资源并为应用程序提供运行环境。其基本原理包括进程管理、内存分配、文件系统等核心机制,通过系统调用接口向用户程序提供服务。理解这些机制的技术价值在于能够编写高效、稳定的系统级软件,并具备调试复杂问题的能力。在应用场景上,操作系统知识是后端开发、系统运维、云计算等领域的基础。本文以Linux环境下的C语言实践为例,深入解析进程创建、内存管理等核心概念,并针对“头歌”平台的课堂练习,提供从环境搭建到系统调用的完整实操指南,帮助读者通过动手实践巩固理论知识。 阅读详情

硬件资源查看命令


1 ) 用户与系统状态监控

  • w命令
    • 查看当前登录用户及来源主机(FROM字段显示远端主机IP)
    • 在桥接网络模式下,虚拟机可分配独立IP
    • 示例输出:
      USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT 
      root     pts/0    192.168.0.101   10:30    1:00   0.05s  0.01s -bash
      
    • 示例:服务器192.168.0.106的登录用户root,来源IP192.168.0.101(客户端主机地址)
  • top命令:动态显示进程资源占用,关键字段包括:
    • CPU%:CPU实时使用百分比
    • MEM:内存总量(如1G)
      • total:总内存(如1GB)
      • free:可用内存
      • used:已用内存
      • buff/cache:缓冲区与缓存占用
    • 内存计算:used = total - free - buffers - cache
    • FREE/USED:可用/已用内存
    • BUFFER/CACHE:内核缓冲区与页缓存
    • SWAP:磁盘空间虚拟化的应急内存,物理内存不足时启用

2 )存储空间分析

  • du -h:查看目录大小(如/root目录76MB)
  • df命令:
    • df:默认以KB为单位显示文件系统磁盘空间
    • df -h(推荐):人性化显示单位(GB/MB)
       $ df -h 
       Filesystem      Size  Used Avail Use% Mounted on
       /dev/sda1       8.0G  2.1G  6.0G  26% /
      
  • 关键字段:
    • Filesystem:设备路径(如/dev/sda1)
    • Size/Used/Avail:总容量/已用/可用空间
    • Use%:使用百分比(如26%)
    • Mounted on:挂载点(如根分区/)
  • df 从文件系统元数据读取,du 计算文件实际物理块占用

3 )内存专用工具

  • free:静态输出内存信息(数据来源/proc/meminfo),参数:

    • free -m:以MB为单位(如总内存990MB)
    • free -g:以GB为单位(小数自动舍入)
    $ free -m 
                 total  used  free  shared  buff/cache  available
    Mem:           990   287   102       8          600         701 
    Swap:         1023    15  1008 
    

    数据来源:直接读取/proc/meminfo虚拟文件

字段解析:

  • total:物理内存总量

  • shared:tmpfs临时文件系统占用

  • buff/cache:缓冲区 buffer +页缓存总和 page cache

  • available:实际可用内存(含可释放缓存)

  • 参数说明:

    • -b/-k/-m/-g:指定字节/KB/MB/GB单位

4 )系统与硬件信息

  • uname -a:输出内核版本(如3.10.0-957.el7.x86_64)
    • 输出示例:Linux localhost 3.10.0-957.el7.x86_64 x86_64 GNU/Linux
  • cat /proc/cpuinfo:查看CPU型号、核心数、频率(如Intel Core i5 @2.9GHz)
    • /proc虚拟文件系统
    • processor:逻辑处理器编号
    • model name:型号(如Intel Core i5)
    • cpu MHz:主频(如2.9GHz)
  • 内存详情:cat /proc/meminfo(与free命令同源)
  • hostname:显示主机名(如localhost.localdomain),信息存储于 /etc/hosts。

磁盘分区与文件系统


1 )磁盘分区查看

$ fdisk -l /dev/sda 
Device     Boot Start   End Sectors Size Type 
/dev/sda1  *     2048 2099199 2097152   1G Linux filesystem 
/dev/sda2      2099200 8388607 6289408   3G Linux LVM 

2 )分区核心概念

硬盘物理空间 → 分区划分(主/扩展/逻辑) → 格式化文件系统 → 挂载使用 
分区类型特性说明编号规则限制
主分区 (Primary)直接存储数据,上限4个(MBR) 或128+(GPT模式)1-4MBR 最多 4 个
扩展分区 (Extended)容器分区,指针容器,不可直接存数据1-4每个硬盘仅 1 个
逻辑分区 (Logical)在扩展分区内创建,数量无限制从5开始无数量限制(GPT 模式)

3 )文件系统对比

类型WindowsLinux特性
传统FAT32EXT2非日志型,恢复困难
日志型NTFSEXT4/XFS断电快速恢复,CentOS 7默认XFS
最大容量16EBXFS(18EB)1EB = 1,152,921,504,606,846,976字节

说明

系统适用场景最大容量日志功能
EXT4Linux 默认1 EB支持
XFSCentOS 7+ 默认18 EB高性能恢复
NTFSWindows 系统16 EB(理论)支持
Swap虚拟内存交换分区无独立文件系统无

4 ) 硬盘类型对比

类型原理优势劣势
HDD磁碟片+机械磁头读写容量大、成本低速度慢、噪音大、怕震动
SSDNAND闪存芯片速度快、抗震性强价格高、寿命有限

还有一种:SSHD(混合硬盘):HDD与SSD结合体

5 ) 设备命名规则

  • 设备路径:/dev/[sdX][Y]

    • X:磁盘序号(a=第一块, b=第二块)
    • Y:分区编号(1=主分区, 5=逻辑分区)
  • 设备类型标识:

    • 字符设备(c):键盘、串口(如 /dev/tty1)
    • 块设备(b):硬盘、U盘(如 /dev/sda)

示例:

  • /dev/sda:第一块SATA/SCSI硬盘
  • /dev/sdb2:第二块硬盘的第二个主分区

分区逻辑:

  • MBR模式:最多4个主分区(需扩展分区容纳逻辑分区)
  • GPT模式:支持128+主分区,无扩展分区需求
  • 示例:单硬盘安装Windows+Linux时,需划分独立分区

设备挂载与卸载


1 ) 永久挂载配置

编辑/etc/fstab文件,按格式添加设备:

设备路径/UID   挂载点   文件系统  权限选项  备份标记  自检顺序 
/dev/sdb1      /data    xfs       defaults   0         0 
UUID=xxxx...  /swap    swap      defaults   0         0 

字段顺序:设备文件 → 挂载点 → 文件系统类型 → 权限选项 → 备份 → 自检

2 ) 命令操作

  • 挂载:mount /dev/sdb1 /mnt/newdisk 前面是设备,后面是目录

  • 卸载:umount /mnt/newdisk 或 umount /dev/sdb1 这里卸载设备或目录均可

  • 交换分区:

    mkswap /dev/sdb2    # 格式化swap分区 
    swapon /dev/sdb2    # 启用swap 
    

硬盘添加与分区实战


1 ) 虚拟机添加硬盘

  1. 关闭系统:poweroff
  2. VirtualBox:设置 → 存储 → 添加新硬盘(动态分配)
  3. 启动系统:识别新设备(如/dev/sdb)

2 ) 分区与格式化

fdisk /dev/sdb      # 进入交互工具 
n → p → 1 → [Enter] # 创建主分区 
+2G                 # 分配2GB空间 
w                   # 保存退出 
partprobe           # 更新分区表 
mkfs.xfs /dev/sdb1  # 格式化为XFS 

3 ) 交换分区扩展

fdisk /dev/sdb 
n → p → 2 → [Enter] → +3G  # 创建3GB分区 
t → 2 → 82                 # 类型改为swap 
mkswap /dev/sdb2           # 创建交换分区
swapon /dev/sdb2           # 启用交换分区 
free -m                    # 验证swap扩容 

4 )使用dd备份分区

dd if=/dev/sda1 of=/backup.img bs=4M  # 备份sda1至镜像文件 

创建稀疏文件

dd if=/dev/zero of=sparsefile bs=1M seek=1024 count=0  # 创建1GB空洞文件 

关键参数:bs(块大小)、count(块数)、seek(跳过快数)

NestJS监控磁盘空间示例


1 )方案1

获取磁盘信息

import { exec } from 'child_process';
import { Injectable } from '@nestjs/common';
 
@Injectable()
export class DiskService {
  async getDiskUsage(): Promise<string> {
    return new Promise((resolve, reject) => {
      exec('df -h', (error, stdout) => {
        if (error) reject(`Error: ${error.message}`);
        resolve(stdout);
      });
    });
  }
}

代码说明:

  • 通过child_process执行df -h命令
  • 封装为NestJS服务供控制器调用
  • 返回格式化的磁盘使用数据

实现Linux进程监控API

import { Controller, Get } from '@nestjs/common';  
import { execSync } from 'child_process';  

@Controller('process')  
export class ProcessController {  
  @Get('stats')  
  getProcessStats(): string {  
    // 使用Linux命令获取进程资源占用  
    const cpuUsage = execSync("top -bn1 | grep 'Cpu(s)' | awk '{print $2}'").toString();  
    const memoryUsage = execSync("free -m | grep 'Mem' | awk '{print $3}'").toString();  
    return `CPU占用: ${cpuUsage}%, 内存使用: ${memoryUsage}MB`;  
  }  
}  

代码说明:通过execSync调用Shell命令,封装为RESTful API供前端监控系统调用

2 )方案2

磁盘挂载与卸载

// NestJS挂载逻辑示例 (src/storage/mount.service.ts)
import { execSync } from 'child_process';
 
export class MountService {
  static mountDevice(device: string, mountPoint: string): void {
    try {
      execSync(`mkdir -p ${mountPoint}`);
      execSync(`mount ${device} ${mountPoint}`);
      console.log(`[SUCCESS] ${device} mounted to ${mountPoint}`);
    } catch (error) {
      throw new Error(`Mount failed: ${error.stderr.toString()}`);
    }
  }
 
  static unmount(mountPoint: string): void {
    try {
      execSync(`umount ${mountPoint}`);
      console.log(`[SUCCESS] ${mountPoint} unmounted`);
    } catch (error) {
      throw new Error(`Unmount failed: ${error.stderr.toString()}`);
    }
  }
}
 
// 调用示例 
MountService.mountDevice('/dev/sdb1', '/mnt/newdisk');

交换分区管理

// 交换分区操作服务 (src/storage/swap.service.ts)
export class SwapService {
  static activateSwap(device: string): void {
    try {
      execSync(`mkswap ${device}`);
      execSync(`swapon ${device}`);
      console.log(`[SUCCESS] Swap activated: ${device}`);
    } catch (error) {
      throw new Error(`Swap activation failed: ${error.stderr.toString()}`);
    }
  }
 
  static persistSwapInFstab(device: string): void {
    const fstabEntry = `${device} swap swap defaults 0 0`;
    try {
      execSync(`echo '${fstabEntry}' >> /etc/fstab`);
      console.log(`[SUCCESS] Added to /etc/fstab: ${device}`);
    } catch (error) {
      throw new Error(`fstab update failed: ${error.stderr.toString()}`);
    }
  }
}

分区信息获取接口

// 分区信息API接口 (src/storage/storage.controller.ts)
import { Controller, Get } from '@nestjs/common';
import { readFileSync } from 'fs';
 
@Controller('storage')
export class StorageController {
  @Get('partitions')
  getPartitions() {
    const data = readFileSync('/proc/partitions', 'utf8');
    return data 
      .split('\n')
      .slice(2)
      .map(line => {
        const [major, minor, blocks, name] = line.trim().split(/\s+/);
        return { major, minor, blocks, name };
      });
  }
}

3 ) 方案3

自动化脚本示例(磁盘监控):

import { execSync } from 'child_process';
import { Controller, Get } from '@nestjs/common';

@Controller('disk')
export class DiskController {
  @Get('usage')
  getDiskUsage() {
    const output = execSync('df -h').toString();
    return { status: 'success', data: output };
  }

  @Get('add-partition')
  addPartition() {
    // 模拟分区操作(实际需sudo权限)
    execSync('echo "n\np\n1\n\n+2G\nw" | fdisk /dev/sdb');
    execSync('mkfs.xfs /dev/sdb1');
    execSync('mkdir -p /newfs && mount /dev/sdb1 /newfs');
    return { status: 'partition_created' };
  }
}

4 ) 方案4

import { Controller, Get } from '@nestjs/common';
import { execSync } from 'child_process';

@Controller('system')
export class SystemController {
  @Get('memory')
  getMemoryInfo() {
    const output = execSync('free -m').toString();
    return { memory: this.parseFreeOutput(output) };
  }

  private parseFreeOutput(output: string) {
    const lines = output.trim().split('\n');
    const memLine = lines[1].split(/\s+/).filter(Boolean);
    return {
      total: parseInt(memLine[1]),
      used: parseInt(memLine[2]),
      free: parseInt(memLine[3]),
      swap: parseInt(lines[2].split(/\s+/)[2])
    };
  }

  @Get('disks')
  getDiskInfo() {
    const output = execSync('df -h').toString();
    const lines = output.trim().split('\n').slice(1);
    return lines.map(line => {
      const [filesystem, size, used, avail, usePct, mountedOn] = line.split(/\s+/);
      return { filesystem, size, used, avail, usePct, mountedOn };
    });
  }
}

功能说明:

  • /system/memory:返回内存和 Swap 使用统计(MB)
  • /system/disks:返回挂载点磁盘空间信息(人类可读格式)

5 ) 方案5

import { Controller, Get } from '@nestjs/common';
import { execSync } from 'child_process';
import { readFileSync } from 'fs';
 
@Controller('disk')
export class DiskController {
 
  @Get('usage')
  getDiskUsage() {
    // 调用df命令获取磁盘数据
    const dfOutput = execSync('df -h').toString();
    return { data: dfOutput };
  }
 
  @Get('memory')
  getMemoryInfo() {
    // 直接读取/proc/meminfo
    const memInfo = readFileSync('/proc/meminfo', 'utf-8');
    const totalMem = memInfo.match(/MemTotal:\s+(\d+)/)?.[1];
    return { totalMemoryKB: parseInt(totalMem) };
  }
 
  @Get('block-devices')
  listBlockDevices() {
    // 解析lsblk输出 
    const devices = execSync('lsblk -J').toString();
    return JSON.parse(devices);
  }
}

代码说明:

使用execSync执行df/lsblk命令获取结构化数据
直接读取/proc/meminfo避免依赖外部工具
lsblk -J输出JSON格式便于程序解析

要点总结

  1. 资源查看:w/top实时监控,free/df专注内存磁盘,/proc目录提供原始数据
  2. 设备命名:sdX为磁盘,sdXY为分区,内核按检测顺序分配字母
  3. 分区逻辑:主分区直接存储,逻辑分区依赖扩展分区突破4分区限制
  4. 性能对比:SSD随机读写快,HDD顺序访问优,XFS适合大容量存储
  5. 挂载铁律:设备必须格式化→挂载点需为空目录→配置/etc/fstab实现永久生效

关键运维结论

  1. 硬件设备分类

    • 字符设备(/dev/tty*):以字节流传输(键盘、串口),属性标识 c。
    • 块设备(/dev/sd*):以固定块存取(硬盘),属性标识 b。
  2. 设备命名规则:

    • sd*:SCSI/SATA/USB设备(如sda第一硬盘,sdb1第二硬盘第一分区)
    • hd*:遗留IDE设备(逐步淘汰)
  3. 性能优先原则:

    • SSD替换HDD:消除机械寻道延迟,IOPS提升10-100倍
    • XFS作为默认文件系统:支持18EB存储与快速故障恢复
  4. 内存优化策略:

    • Swap分区大小 = 物理内存×1.5(如16GB内存配24GB Swap)
    • 通过/proc/sys/vm/swappiness调整交换倾向(0-100值越低越少用Swap)

所有操作涉及磁盘分区时,必须提前备份数据
fdisk、mkfs等命令直接操作物理存储,误操作可能导致数据不可逆丢失

本文全面梳理了 Linux 硬件资源监控(CPU、内存、磁盘)、设备管理(分区、文件系统、挂载)及高级操作(dd 备份、Swap 配置)

北航计算机学院操作系统理论总结整理第一章引论 操作系统总结整理第一章引论 本系列博客是源于2018级北航计算机学院的操作系统理论课程的课堂笔记、课堂练习及课后笔记整理而来。相关的参考资料绝大多数来自于北航计算机学院操作系统课程组,同时也参考了机械工业出版社出版的《现代操作系统(中文第四版)》。 由于本博客是本系列博客的开篇,故于此简单介绍一下北航计算机学院操作系统理论课程的目标,再进行第一章内容的总结。 操作系统课程目标 掌握操作系统的基本原理 进程管理 存储管理 设备管理 文件系统 对操作系统的基本概念、基本结构及运行环境有深入的认识; 具 阅读详情

相关推荐

操作系统入门实战:从进程、内存到文件系统的核心原理与实验解析

操作系统是计算机系统的核心,它通过抽象硬件、管理资源,为上层应用提供稳定高效的运行环境。其核心原理包括进程管理、内存管理和文件系统,这些机制共同决定了程序如何运行、资源如何分配。理解这些原理对于解决程序崩溃、服务启动失败等常见问题至关重要,也是提升系统级问题排查能力的基础。本文以课堂练习为切入点,深入解析了进程创建(fork)、文件描述符重定向(dup2)以及虚拟内存等关键机制,并结合热词中提到的“claude.exe无法运行”和“服务开机自启”等典型场景,阐述了系统调用、权限管理和服务管理等技术在实际中的

wyjvip333的专栏 469

操作系统课堂笔记一-操作系统概述

文章目录操作系统概述简介一个完整的程序执行参考 操作系统概述 简介 本文主要针对操作系统里面一些原理进行剖析, 操作系统也可以说是程序员必经之路, 学的好坏会有本质的区别,尤其是大公司(BAT)的面试, 对操作系统有了解必然是极大的加分项, 个人认为国内讲的不错的一个老师-陈向群老师(北京大学), 我的大部分理论也是从她那里学来的, 博主会把一些关键点记录好给大家方便查看, 后期有时间会优化下结...

北大虫师的博客 2761

掌控板与micro:bit深度对比:如何为编程教育选择开源硬件

开源硬件是创客教育和物联网开发的重要基础,其核心在于通过可编程的微控制器,连接传感器和执行器,实现物理世界的数字化交互。从原理上看,这类硬件通常基于ARM或Xtensa架构的微处理器,运行实时操作系统或轻量级解释器,通过GPIO、I2C、SPI等接口与外部设备通信。其技术价值在于降低了嵌入式开发门槛,使得学生和开发者能够快速原型验证,将编程逻辑与物理效果直观结合。在应用场景上,开源硬件广泛应用于STEAM教育、智能家居原型、艺术交互装置等领域。本文聚焦于教育领域两款主流开源硬件——掌控板和BBC micro

weixin_33824363的博客 500

Linux小课堂: 从零到上手的指南

Linux操作系统核心解析 作为现代计算领域的基石,Linux以其开源特性、高效稳定著称,支撑着从移动设备(安卓系统)到超级计算机(全球Top500全采用)的广泛应用。区别于Windows的商用模式,Linux遵循GNU自由软件理念,允许用户自由使用、修改和分发代码。其技术优势体现在:多系统共存机制(通过GRUB引导)、跨平台兼容性(支持x86/ARM等架构)及卓越的资源管理能力(程序轻量化运行)。随着云计算/AI等新兴领域发展,Linux凭借开放生态持续巩固其技术基础设施地位,成为开发者必备技能之一。

Wang的专栏 730

雨课堂——操作系统3月2日作业 01 什么是操作系统

1.下列关于操作系统的说法,错误的是() A.操作系统为应用程序提供访问硬件的接口 B.操作系统管理和控制计算机系统的各类资源 C.操作系统控制数据在计算机中的移动、存储和处理 D.操作系统可以扩展计算机硬件的功能 2.与多道批处理系统相比较,分时操作系统的优越性体现在() A.可以同时执行多个程序 B.执行程序的效率更高 C.支持交互式程序的执行 D.对交互操作的响应更及时 3.与分时系统相比较...

想去见见你的博客 1018

Linux+Python实战课堂:笔记、练习与应用

Linux操作系统,作为自由软件运动的产物,由芬兰学生林纳斯·托瓦兹(Linus Torvalds)在1991年首次发布,它秉承了开源精神,允许用户自由地使用、学习、修改和分发代码。在本章中,我们将探讨Linux的诞生背景、核心哲学以及它如何影响现代IT行业。Ubuntu:基于Debian的发行版,以其用户友好性而闻名。它拥有庞大的软件库和社区支持,经常用于桌面计算和服务器部署。Fedora:由Red Hat支持,注重采用最新的开源技术。

weixin_35754676的博客 812

了解操作系统,什么是操作系统Operation System?

了解操作系统,什么是操作系统Operation System?

lkr 2253

从噪声中提取真相:LabVIEW振动信号积分处理的降噪艺术

本文深入探讨了LabVIEW在振动信号积分处理中的降噪技术,揭示了如何通过选择性频率加权从噪声中提取关键故障特征。详细介绍了时域和频域积分方法的实现原理及优化策略,并结合工业案例展示了多轴信号联合降噪的实际应用效果,为设备状态监测提供了高效解决方案。

weixin_29164185的博客 303

【黑金云课堂】FPGA技术教程Linux开发:系统驱动/UIO驱动

Linux 驱动运行在内核空间,作为硬件、操作系统、上层应用的通信桥梁;应用通过库函数发起系统调用,陷入内核后由驱动操作硬件,区分用户空间、内核空间。UIO 核心思想是轻量内核驱动,业务逻辑放在用户态,适合 FPGA 自定义 IP、工业 IO 卡这类只需要访问硬件内存、处理中断的设备;内核只做基础资源管理,降低内核模块 bug 风险。内核暴露/dev/uioX字符设备、sysfs 节点给应用程序。以 PWM 自定义 IP 为例,给出寄存器地址表;开启内核 UIO 配置设置of_id参数。

ALINX技术博客 213

告别Python依赖!用C++编译PaddleOCR打造轻量级本地OCR工具(附模型选择与性能对比)

本文详细介绍了如何将PaddleOCR从Python迁移到C++平台,打造高性能、低资源占用的本地OCR工具。通过对比Python和C++实现的性能差异,展示了C++在冷启动时间、内存占用和部署便捷性上的显著优势。文章还提供了模型选择、编译配置和优化技巧等实用指南,帮助开发者轻松构建轻量级OCR解决方案。

weixin_28717467的博客 256

VisionPro脚本实战:用C#替代QuickBuild,让复杂定位项目代码更清爽

本文探讨了如何通过C#脚本重构VisionPro复杂定位项目,替代臃肿的QuickBuild架构。通过实战案例展示了脚本化开发如何减少60%代码量并提升35%运行效率,使项目更易维护。文章详细介绍了环境搭建、多模板定位重构及高级技巧,帮助开发者突破QuickBuild限制,实现更高效的视觉应用开发。

weixin_30417487的博客 502

开源硬件编程神器:OpenBlock Desktop完整入门指南

想要学习硬件编程却对复杂的代码望而却步?OpenBlock Desktop为你提供了终极解决方案!这是一款完全免费的开源图形化编程软件,专为Arduino、Microbit、ESP32等硬件设备设计。通过直观的拖放式积木块编程,即使是零基础的新手也能快速上手硬件开发,轻松实现从创意到实际项目的完整流程。 ## 为什么选择OpenBlock Desktop? 传统的硬件编程往往需要掌握复杂的C+

gitblog_00128的博客 696

基于YOLOv8与PyQt5的课堂行为检测系统开发实践

目标检测作为计算机视觉的核心技术,通过深度学习算法实现对图像中特定目标的识别与定位。YOLOv8作为当前最先进的实时检测框架,以其优异的精度-速度平衡著称,特别适合教育场景下的行为分析应用。结合PyQt5跨平台GUI开发能力,可以构建完整的视觉检测系统解决方案。在实际工程实现中,需要重点考虑模型轻量化、推理加速和多线程处理等关键技术,确保系统在课堂环境下达到实时性要求。本方案通过YOLOv8n轻量级模型与PyQt5的深度整合,实现了举手、玩手机等6种典型课堂行为的实时检测,为教育信息化提供了实用的技术参考。

weixin_33743248的博客 442

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1259

【ComfyUI】Z-Image 基础文生图 + 单LoRA

本文介绍了一个基于ComfyUI的Z-Image Turbo基础文生图工作流,采用轻量化UNet模型配合Qwen Image文本理解模型与LoRA风格注入,实现从文本到图像的快速生成。工作流结构清晰,包含模型加载、文本编码、采样解码等标准节点,在人物生成、构图稳定性和出图速度方面表现均衡。通过调整Prompt可控制生成内容,适合日常创作、教学演示及扩展进阶应用。

Mr数据杨 926

关于Linux的初步理解和认识

Linux是由芬兰学生Linus Torvalds 于1991年首次发布。

2403_87817494的博客 489

软件测试高频面试题 2026 最新整理(功能 + 自动化)

本文系统整理了2026年软件测试面试高频题目及参考答案,涵盖功能测试、自动化测试及新兴热点领域。功能测试部分包含测试基础概念、用例设计方法、缺陷管理流程等10个必背题;自动化测试部分详细解析工具选择、元素定位、框架搭建等10个热门考点;新增章节聚焦AI测试、安全测试、性能指标等5个前沿话题。参考答案均采用结构化表述,包含定义、区别、适用场景等关键要素,并强调结合项目经验作答。文末提供2026版面试技巧,建议采用"结论-分点-总结"的回答逻辑,重点展现问题解决能力和技术前瞻性。

SmallBull的博客 1968

操作系统期末复习指南:从进程调度到内存管理核心考点解析

操作系统是计算机系统的核心软件,负责管理硬件资源并为应用程序提供运行环境。其核心原理围绕进程管理、内存管理、文件系统和设备驱动等关键模块展开。通过进程调度算法(如FCFS、SJF、RR)和内存管理机制(如分页、虚拟内存、页面置换算法LRU),操作系统实现了对CPU和内存的高效、公平分配。这些技术不仅保证了多任务并发执行的稳定性和性能,也是理解程序运行、系统调优及问题排查(如程序兼容性错误、内存不足)的基础。在实际应用场景中,无论是桌面系统、服务器还是嵌入式环境,操作系统的设计思想都至关重要。本文以进程管理和

weixin_30645617的博客 390

半导体晶圆调平系统:基于最小二乘法的实现方案

基于最小二乘法的晶圆调平技术通过数学建模与工程实现的结合,解决了半导体量测中高精度平面对准的核心问题。实际应用中,需根据设备特性优化采样策略、校准传感器误差,并通过实时性优化满足高产能场景需求。该方案的模块化设计(如分离数据采集、拟合计算、补偿输出)也为后续功能扩展(如引入机器学习优化拟合模型)提供了灵活性。

品质生活,极致编程。 1181

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

课堂学习内容

软件的定义 软件是用户与硬件之间的接口,用户主要通过软件与计算机交流 软件的分类 按功能分类 1.系统软件 (1)操作系统 (2)支撑软件 2.应用软件 按软件的规模分类 微型,小型、中型、大型、甚大型和极大型6种 按工作方式分类 (1)实时处理软件 (2)分时软件 (3)交互式软件 (4)批处理软件 软件架构 1.软件架构的定义 软件架构是有关软件整体结构与组件的抽象模式,用于指导大型软件系统各...

zhou_mumu的博客 331

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

嵌入式课堂1拓展知识

一、中间层 硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配...

Tina_linux的博客 399

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux系统编程课程改革,项目驱动的Linux操作系统课程教学改革

摘 要 《Linux操作系统》是一门应用性很强的课程,在技师学院已被列为计算机网络技术专业的教学计划。在传统的教学模式中,教师往往按照教材编排的顺序,把知识介绍给学生,而不是把知识的应用方法教给学生。这种教学模式无法突出教学重点,增加了学生的学习负担。本文针对技师学院学生的培养目标和学生特点,通过对《Linux操作系统》课堂教学方法的探索性研究,提出了基于“项目驱动”的教学方法,并且对这种方法进行...

weixin_36154762的博客 638

0909学习操作系统

正式步入了大三的学习过程中了,在本学期我们就要学到一门相当重要的课程,就是操作系统。在我的印象中,我觉得生活中电子设备都有一个操作系统。操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。所以在我看来,操作系统是计算机和其他软件或硬件最基本的一个结构。想要自己实现一个软件或硬件的成功运行,则必...

weixin_30858241的博客 113

linux内核分析 网络九,Linux内核分析(九)——总结篇

禹晓博+ 原创作品转载请注明出处 + 欢迎加入《Linux内核分析》MOOC网易云课堂学习序:写在前面的话本次内容作为Linux内核的总结内容,主要涉及对Linux系统的总体的一些理解,同时将之前的一些总结贴出来作为大家的一个索引,希望笔者的博客能对和笔者一样的菜鸟有一些帮助和入门的作用。从一个初学者的角度对Linux有一个较为整体的印象,从而加速对Linux操作系统的理解。一、Linux内核分析...

weixin_30191159的博客 222

Linux字符设备驱动开发实战:从用户空间到内核空间的完整通路

在Linux系统编程中,理解用户空间与内核空间的交互机制是深入操作系统核心的关键。Linux遵循“一切皆文件”的设计哲学,通过虚拟文件系统(VFS)层为所有设备提供统一的文件操作接口,如open、read、write和close。这一抽象层使得应用程序能够以操作普通文件的方式访问硬件设备或虚拟设备,极大地简化了编程模型并提升了系统可扩展性。其技术价值在于实现了用户态与内核态的安全、高效通信,为驱动开发提供了标准化框架。在嵌入式系统、外设驱动开发和系统级软件中,这种机制被广泛应用于实现设备控制、数据采集和系统

weixin_30466039的博客 394
上一篇: Linux小课堂: 磁盘容量配额配置与管理
下一篇: Linux小课堂: 系统核心技能与应用总结与进阶指南
Wang's Blog
博客等级 码龄12年 7423粉丝 2412原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值