泉缘泉 发表于 2025-3-9 22:14:02

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

一、什么是系统编程

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

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


[*]与应用程序编程的区别:

[*]应用程序编程:关注用户功能(如Web开发、移动应用开发)。
[*]系统编程:关注底层功能(如内存管理、进程调理、装备驱动)。

2. 系统编程的特点


[*] 与硬件和操作系统精密相关:

[*]直接调用操作系统提供的API(如Linux的系统调用)。
[*]直接操作硬件资源(如内存、寄存器、装备控制器)。

[*] 高效性和性能优化:

[*]系统软件是其他应用程序运行的基础,因此对性能要求极高。
[*]必要优化代码以减少资源占用和提高执行服从。

[*] 低级别语言:

[*]通常使用C、C++、汇编语言等低级语言,因为它们提供了对硬件的直接控制本领。
[*]高级语言(如Python、Java)通常不恰当系统编程,因为它们的抽象层次较高。

[*] 复杂性和难度:

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

3. 系统编程的应用领域


[*] 操作系统开发:

[*]编写操作系统内核、文件系统、进程调理器等。
[*]例如,Linux、Windows、macOS等操作系统的开发。

[*] 装备驱动程序:

[*]编写硬件装备的驱动程序,使操作系统能够与硬件通信。
[*]例如,显卡驱动、网络适配器驱动等。

[*] 嵌入式系统:

[*]为嵌入式装备(如智能家居、工业控制器)编写固件和底层软件。
[*]例如,物联网装备的开发。

[*] 系统工具和实用程序:

[*]编写系统管理工具,如编译器、调试器、网络协议栈等。
[*]例如,GCC编译器、Wireshark网络分析工具。

[*] 虚拟化和容器技术:

[*]实现虚拟机管理程序(如KVM、Xen)和容器引擎(如Docker)。
[*]例如,云盘算平台的基础办法开发。

4. 系统编程的焦点概念


[*] 系统调用(System Call):

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

[*] 内存管理:

[*]管理物理内存和虚拟内存,包括内存分配、释放、分页、分段等。
[*]例如,C语言中的malloc()和free()函数。

[*] 进程和线程:

[*]管理进程的创建、调理、同步和通信。
[*]例如,Linux中的fork()、exec()、pthread_create()等函数。

[*] 文件系统:

[*]实现文件的存储、检索和管理。
[*]例如,Linux中的ext4、NTFS等文件系统。

[*] 网络编程:

[*]实现网络协议的栈和通信机制。
[*]例如,TCP/IP协议栈、Socket编程。

[*] 停止处理:

[*]处理硬件停止,以响应外部事故(如键盘输入、网络数据到达)。
[*]例如,Linux中的停止处理程序(ISR)。

[*] 并发和同步:

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

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


[*] 编程语言:

[*]C、C++、汇编语言是系统编程的主要语言。
[*]Rust也逐渐成为系统编程的热门选择,因为它提供了内存安全性。

[*] 开发工具:

[*]编译器:GCC、Clang
[*]调试器:GDB、LLDB
[*]性能分析工具:Valgrind、Perf

[*] 操作系统API:

[*]Linux系统调用:syscall、open、read、write
[*]Windows API:CreateProcess、ReadFile、WriteFile

[*] 虚拟化和容器技术:

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

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

1. 进程管理(Process Management)



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



[*]操作系统管理盘算机的主存(RAM),负责分配和接纳内存空间。
[*]实现虚拟内存技术,允许程序使用比物理内存更大的地址空间,并通过页面置换算法(如FIFO、LRU等)管理内存页面。
3. 文件系统管理(File System Management)



[*]操作系统提供文件存储、检索、构造和掩护的功能。
[*]管理文件的创建、删除、读写和权限控制,确保数据的安全性和一致性。
4. 装备管理(Device Management)



[*]操作系统管理盘算机的硬件装备,包括输入输出装备(如键盘、鼠标、打印机等)。
[*]通过装备驱动程序与硬件交互,提供装备的停止处理、缓冲和调理功能。
三、盘算机系统分层

https://i-blog.csdnimg.cn/direct/b018d749105a475e871d2896d8ac5864.png#pic_center
盘算机系统通常可以分为多个层次,每一层都有其特定的功能和职责。
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。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Linux系统编程】初识系统编程