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

【Linux系统编程】初识系统编程

目录

    • 一、什么是系统编程
      • 1. 系统编程的定义
      • 2. 系统编程的特点
      • 3. 系统编程的应用领域
      • 4. 系统编程的核心概念
      • 5. 系统编程的工具和技术
    • 二、操作系统四大基本功能
      • 1. 进程管理(Process Management)
      • 2. 内存管理(Memory Management)
      • 3. 文件系统管理(File System Management)
      • 4. 设备管理(Device Management)
    • 三、计算机系统分层
      • 1. 硬件层(Hardware Layer)
      • 2. 操作系统层(Operating System Layer)
      • 3. 系统软件层(System Software Layer)
      • 4. 应用软件层(Application Software Layer)
      • 5. 用户层(User Layer)
    • 四、我们如何使用呢
      • 1.系统调用接口
      • 2.函数库
      • 3.shell

一、什么是系统编程

系统编程(System Programming)是计算机科学中的一个重要领域,专注于开发与计算机硬件和操作系统直接交互的软件。它涉及底层操作、资源管理、系统服务的实现,以及对硬件资源的直接控制。
系统编程(System Programming)是计算机科学中的一个重要领域,专注于开发与计算机硬件和操作系统直接交互的软件。它涉及底层操作、资源管理、系统服务的实现,以及对硬件资源的直接控制。以下是系统编程的详细介绍:

1. 系统编程的定义

系统编程是指编写与操作系统内核、硬件设备、系统资源(如内存、CPU、I/O设备)直接交互的软件。它的主要目标是提供高效、可靠的基础设施,以支持上层应用程序的运行。

  • 与应用程序编程的区别
    • 应用程序编程:关注用户功能(如Web开发、移动应用开发)。
    • 系统编程:关注底层功能(如内存管理、进程调度、设备驱动)。

2. 系统编程的特点

  1. 与硬件和操作系统紧密相关

    • 直接调用操作系统提供的API(如Linux的系统调用)。
    • 直接操作硬件资源(如内存、寄存器、设备控制器)。
  2. 高效性和性能优化

    • 系统软件是其他应用程序运行的基础,因此对性能要求极高。
    • 需要优化代码以减少资源占用和提高执行效率。
  3. 低级别语言

    • 通常使用C、C++、汇编语言等低级语言,因为它们提供了对硬件的直接控制能力。
    • 高级语言(如Python、Java)通常不适合系统编程,因为它们的抽象层次较高。
  4. 复杂性和难度

    • 涉及复杂的底层逻辑,如并发控制、内存管理、错误处理等。
    • 调试和测试系统程序比普通应用程序更具挑战性。

3. 系统编程的应用领域

  1. 操作系统开发

    • 编写操作系统内核、文件系统、进程调度器等。
    • 例如,Linux、Windows、macOS等操作系统的开发。
  2. 设备驱动程序

    • 编写硬件设备的驱动程序,使操作系统能够与硬件通信。
    • 例如,显卡驱动、网络适配器驱动等。
  3. 嵌入式系统

    • 为嵌入式设备(如智能家居、工业控制器)编写固件和底层软件。
    • 例如,物联网设备的开发。
  4. 系统工具和实用程序

    • 编写系统管理工具,如编译器、调试器、网络协议栈等。
    • 例如,GCC编译器、Wireshark网络分析工具。
  5. 虚拟化和容器技术

    • 实现虚拟机管理程序(如KVM、Xen)和容器引擎(如Docker)。
    • 例如,云计算平台的基础设施开发。

4. 系统编程的核心概念

  1. 系统调用(System Call)

    • 应用程序通过系统调用请求操作系统提供服务,如文件操作、进程管理、网络通信等。
    • 例如,在Linux中,open()read()write()等函数都是系统调用。
  2. 内存管理

    • 管理物理内存和虚拟内存,包括内存分配、释放、分页、分段等。
    • 例如,C语言中的malloc()free()函数。
  3. 进程和线程

    • 管理进程的创建、调度、同步和通信。
    • 例如,Linux中的fork()exec()pthread_create()等函数。
  4. 文件系统

    • 实现文件的存储、检索和管理。
    • 例如,Linux中的ext4NTFS等文件系统。
  5. 网络编程

    • 实现网络协议的栈和通信机制。
    • 例如,TCP/IP协议栈、Socket编程。
  6. 中断处理

    • 处理硬件中断,以响应外部事件(如键盘输入、网络数据到达)。
    • 例如,Linux中的中断处理程序(ISR)。
  7. 并发和同步

    • 管理多个进程或线程的并发执行,确保数据一致性和资源竞争的正确处理。
    • 例如,使用互斥锁(Mutex)、信号量(Semaphore)等同步机制。

5. 系统编程的工具和技术

  1. 编程语言

    • C、C++、汇编语言是系统编程的主要语言。
    • Rust也逐渐成为系统编程的热门选择,因为它提供了内存安全性。
  2. 开发工具

    • 编译器:GCC、Clang
    • 调试器:GDB、LLDB
    • 性能分析工具:Valgrind、Perf
  3. 操作系统API

    • Linux系统调用:syscallopenreadwrite
    • Windows API:CreateProcessReadFileWriteFile
  4. 虚拟化和容器技术

    • 虚拟机管理程序:KVM、Xen
    • 容器引擎:Docker、Kubernetes

二、操作系统四大基本功能

1. 进程管理(Process Management)

  • 操作系统负责创建、调度、终止进程,并管理进程之间的通信和同步。
  • 确保CPU资源的高效利用,通过进程调度算法(如先来先服务、短作业优先、时间片轮转等)分配CPU时间。

2. 内存管理(Memory Management)

  • 操作系统管理计算机的主存(RAM),负责分配和回收内存空间。
  • 实现虚拟内存技术,允许程序使用比物理内存更大的地址空间,并通过页面置换算法(如FIFO、LRU等)管理内存页面。

3. 文件系统管理(File System Management)

  • 操作系统提供文件存储、检索、组织和保护的功能。
  • 管理文件的创建、删除、读写和权限控制,确保数据的安全性和一致性。

4. 设备管理(Device Management)

  • 操作系统管理计算机的硬件设备,包括输入输出设备(如键盘、鼠标、打印机等)。
  • 通过设备驱动程序与硬件交互,提供设备的中断处理、缓冲和调度功能。

三、计算机系统分层

在这里插入图片描述
计算机系统通常可以分为多个层次,每一层都有其特定的功能和职责。

1. 硬件层(Hardware Layer)

  • 这是计算机系统的最底层,包括物理硬件设备,如处理器(CPU)、内存(RAM)、硬盘、输入输出设备(键盘、鼠标、显示器等)。
  • 硬件层提供计算机系统运行所需的物理资源。

2. 操作系统层(Operating System Layer)

  • 操作系统层位于硬件层之上,负责管理硬件资源并提供基本的系统服务。
  • 主要功能包括进程管理、内存管理、文件系统管理、设备管理等。

3. 系统软件层(System Software Layer)

  • 这一层包括各种系统工具和库,如编译器、调试器、链接器、系统库等。
  • 系统软件层为应用程序提供运行环境和开发支持。

4. 应用软件层(Application Software Layer)

  • 这是最上层,包括各种应用程序,如办公软件、浏览器、游戏、数据库管理系统等。
  • 应用软件层直接为用户提供服务,满足用户的具体需求。

5. 用户层(User Layer)

  • 用户层包括最终用户,他们通过应用软件与计算机系统进行交互。
  • 用户层是计算机系统的最终服务对象。

这些层次之间通过接口进行交互,每一层都依赖于下层的服务,并为上层提供支持。这种分层结构使得计算机系统的设计、开发、维护和扩展更加模块化和高效。


四、我们如何使用呢

1.系统调用接口

操作系统提供的函数,我们称之为系统调用函数或系统调用接口,比如ls命令就是一个封装好的程序(和我们知道的a.out本质上没区别),会调用内核接口,fopen()也会调用系统库中的open()

应用程序不能直接访问内核代码和数据,只能通过系统调用接口

2.函数库

1)标准C库下的printf()scanf()等,可以跨平台使用。windows和linux都可以使用。
绝大多数标准C库的函数会调用操作系统的提供的函数,比如printf()会调用系统库中的write(),再比如fopen()调用系统库中的open()
2)但是linux系统库下的函数不能跨平台使用,我们这里使用linux提供的。

3.shell

俗称壳,shell是用户和系统交互的媒介,终端窗口不等于shell,只是打开终端会运行shell。我们敲的命令比如ls,借助shell就可以执行。shell是个统称,不同的Linux发行版运行shell不同,比如我们进程在Ubuntu运行的shell就是bash

相关文章:

【Linux系统编程】初识系统编程

目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理(Process Management)2. 内存管理(Memory Management)3. 文…...

解决stylelint对deep报错

报错如图 在.stylelintrc.json的rules中配置 "selector-pseudo-class-no-unknown": [true,{"ignorePseudoClasses": ["deep"]} ]...

React基础之useInperativehandlle

通过ref调用子组件内部的focus方法来实现聚焦 与forwardRef类似,但是forwardRef是通过暴露整个Ref来实现,而useInperativehandle是通过对外暴露一个方法来实现的 import { forwardRef, useImperativeHandle, useRef, useState } from "react";…...

使用joblib 多线程/多进程

文章目录 1. Joblib 并行计算的两种模式多进程(Multiprocessing,适用于 CPU 密集型任务)多线程(Multithreading,适用于 I/O 密集型任务)2. Joblib 的基本用法3. Joblib 多进程示例(适用于 CPU 密集型任务)示例:计算平方4. Joblib 多线程示例(适用于 I/O 密集型任务)…...

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】(C实现)N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…...

【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&…...

ubuntu20系统下conda虚拟环境下安装文件存储位置

在 Conda 虚拟环境中执行 pip install 安装软件后,安装的文件会存储在该虚拟环境专属的 site-packages 目录中。具体路径取决于你激活的 Conda 环境路径。以下是定位步骤: 1. 确认 Conda 虚拟环境的安装路径 查看所有环境: conda info --env…...

鸿蒙开发:RelativeContainer 相对布局详解【全套华为认证学习资料分享(考试大纲、培训教材、实验手册等等)】

前言 在最新版本的 DevEco Studio 中,官方在创建新项目时,默认使用 RelativeContainer 组件作为根布局。这足以证明 RelativeContainer 的重要性。相比其他容器组件,它极大地简化了复杂 UI 布局中的元素对齐问题。 例如,在没有 R…...

基于SpringBoot实现旅游酒店平台功能一

一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…...

HttpServletRequest 和 HttpServletResponse 区别和作用

一、核心作用对比 对象HttpServletRequest(请求对象)HttpServletResponse(响应对象)本质客户端发给服务器的 HTTP 请求信息(输入)服务器返回客户端的 HTTP 响应信息(输出)生命周期一…...

树莓派学习(一)——3B+环境配置与多用户管理及编程实践

树莓派学习(一)——3B环境配置与多用户管理及编程实践 一、实验目的 掌握树莓派3B无显示器安装与配置方法。学习Linux系统下多用户账号的创建与管理。熟悉在树莓派上使用C语言和Python3编写简单程序的方法。 二、实验环境 硬件设备:树莓派…...

Mysql安装方式

方式一:安装包安装 下载安装包 官网直接下载:https://dev.mysql.com/downloads/ 安装配置 2.1、双击刚刚下载好的msi文件,开始安装MySQL。 2.2、选择自定义模式Custom安装 2.3、点击选择自己电脑对应的mysql安装目录 2.5、继续点击下一步&…...

Vue3实战学习(Vue3的基础语法学习与使用(超详细))(3)

目录 &#xff08;1&#xff09;Vue3工程环境准备、项目基础脚手架搭建详细教程。(博客链接) &#xff08;2&#xff09;Vue3的基础语法学习与使用。 &#xff08;1&#xff09;"{{}}"绑定数据。 <1>ref()函数定义变量——绑定数据。 <2>reactive({...})…...

使用websocket,注入依赖service的bean为null

问题&#xff1a;依赖注入失败&#xff0c;service获取不到&#xff0c;提示null 这是参考代码 package com.shier.ws;import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.gson.Gson; import com.s…...

批量在 Word 的指定位置插入页,如插入封面、末尾插入页面

我们经常会碰到需要在 Word 文档中插入新的页面的需求&#xff0c;比如在 Word 文档末尾插入一个广告页、给 Word 文档插入一个说明封面&#xff0c;在 Word 文档的中间位置插入新的页面等等。相信这个操作对于大部分小伙伴来说都不难&#xff0c;难的是同时给多个 Word 文档插…...

算法系列之滑动窗口

算法系列之滑动窗口 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb"…...

【C#】详解C#中的内存管理机制

文章目录 前言一、C#内存管理的基本机制&#xff08;1&#xff09;托管堆&#xff08;Managed Heap&#xff09;&#xff08;2&#xff09;垃圾回收&#xff08;Garbage Collection&#xff09;&#xff08;3&#xff09;栈内存 二、 开发者需要主动管理的场景&#xff08;1&am…...

C/S架构与B/S架构

一、定义与核心区别 C/S架构&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09; 客户端需安装专用软件&#xff08;如QQ、企业ERP系统&#xff09;&#xff0c;直接与服务器通信。服务器端通常包括数据库和业务逻辑处理1。特点&#xff1a;客户端承担部分计算任务…...

《DeepSeek MoE架构下,动态专家路由优化全解析》

在人工智能飞速发展的当下&#xff0c;模型架构的创新与优化始终是推动技术进步的关键力量。DeepSeek的混合专家模型&#xff08;MoE&#xff09;架构&#xff0c;以其独特的设计理念和卓越的性能表现&#xff0c;在大模型领域崭露头角。而其中的动态专家路由优化技术&#xff…...

Android双亲委派

下面是一份 Android 类加载器双亲委派机制的时序图示例&#xff0c;描述了当应用调用 loadClass() 时&#xff0c;各个加载器之间的委派过程。 #mermaid-svg-rBdlhpD2uRjBPiG8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mer…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...