🌌1 初识Linux OS
Linux是一种开源的Unix-like操作系统内核,它是基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。Linux内核最初是由芬兰程序员Linus Torvalds在1991年创建的,之后成为自由软件和开源社区的一个主要项目。
以下是Linux操作系统的一些主要特点和组成部分:
- 内核(Kernel): Linux内核是操作系统的核心,它管理系统资源,如处理器、内存、设备驱动程序等。Linus Torvalds最初编写了Linux内核,它是Linux操作系统的基础。
- Shell(命令解释器): Linux操作系统使用命令行界面(CLI),用户与系统交互通过Shell。用户可以通过输入命令执行各种任务,管理文件、进程、权限等。常见的Shell包括Bash(Bourne Again SHell)和Zsh。
- 文件系统: Linux支持多种文件系统,包括Ext4、XFS、Btrfs等。文件系统负责管理存储设备上的文件和目录,以及文件的权限、所有权等信息。
- 用户界面: 虽然Linux以CLI为主,但也支持图形用户界面(GUI)。常见的Linux桌面环境有GNOME、KDE、XFCE等,它们提供了直观的用户体验。
- 软件包管理系统: 大多数Linux发行版都有自己的软件包管理系统,用于安装、更新和删除软件。常见的包管理工具有APT(Debian/Ubuntu)、YUM(Red Hat/CentOS)、Pacman(Arch Linux)等。
- 网络功能: Linux具有强大的网络功能,支持各种网络协议和服务。它可以作为服务器运行各种网络服务,如Web服务器(Apache、Nginx)、邮件服务器(Postfix、Sendmail)、文件服务器(Samba)等。
- 多用户和多任务: Linux是一个多用户系统,多个用户可以同时访问同一台机器。它也是一个多任务系统,可以同时运行多个进程。
- 安全性: Linux以安全性而闻名,系统管理员可以设置用户权限、访问控制列表(ACLs)等来确保系统的安全性。
- 开源和自由: Linux是开源软件,其源代码可以被任何人查看、修改和分发。大多数Linux发行版是免费提供的,用户可以自由选择、使用和分发。
- 发行版(Distribution): 由于Linux内核是开源的,不同的组织和社区创建了各种Linux发行版,例如Ubuntu、Debian、Fedora、CentOS、Arch Linux等。每个发行版都有自己的特点和包管理系统。
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
🌌2 显示进程列表
🌍2.1 研究目的
- 掌握进程结构及进程管理原理:理解进程结构是深入研究操作系统的基础。进程是程序的执行实体,了解其结构包括进程控制块、程序计数器、寄存器等要素。同时,深入了解进程管理原理,如进程的创建、调度、同步和通信,是为了有效地协调和控制各个进程,确保系统资源的合理利用。
- 进一步了解用户空间和内核空间的概念:用户空间和内核空间是操作系统的关键概念。用户空间是给用户程序提供的独立内存空间,而内核空间是操作系统内核运行的特权空间。通过研究显示进程列表,可以更深入地理解用户空间和内核空间之间的切换机制,以及用户程序和操作系统内核之间的交互方式。
- 加深对进程调度算法的理解:进程调度算法直接影响系统的性能和响应速度。通过研究显示进程列表,可以深入了解不同的进程调度算法,如先来先服务(FCFS)、最短作业优先(SJF)、轮转法(Round Robin)等。了解这些算法的优缺点,有助于优化系统的性能和资源利用效率。
- 探讨进程间通信和同步机制:多个进程之间的通信和同步是操作系统设计中的关键问题。通过研究显示进程列表,可以更深入地了解进程间通信的方式,如共享内存,以及同步机制的实现,如信号量、互斥锁等。这有助于确保进程间协同工作的正确性和稳定性。
🌍2.2 研究内容
- 进程列表的获取和展示: 研究如何在操作系统中获取和展示当前运行的进程列表。这包括了理解系统调用和API,以及使用相应的工具或命令行来检索有关正在运行进程的信息。了解进程的状态、PID(进程标识符)、CPU利用率等关键信息是这个方面的核心内容。
- 进程调度和优先级: 深入研究操作系统是如何进行进程调度的,包括进程的创建、暂停、恢复和终止等操作。了解进程调度算法和优先级策略,以及它们如何影响系统性能和响应时间,是理解操作系统中进程列表管理的重要组成部分。
- 进程通信和同步: 研究进程之间的通信和同步机制,以确保它们能够有效地协同工作。这可能涉及到共享内存、消息传递、信号和同步原语等概念。了解这些机制有助于理解进程列表中的多任务协作,以及如何避免竞态条件和死锁等问题。
🌍2.3 研究步骤
1.使用vi /usr/src/linux-2.4.20-8/include /linux/sched.h查看task_struct结构中的成员变量,后续显示的变量名称可在此处找到.
2.参考ppt给定源码,根据task_struct结构中找出的十个成员变量通过指针指向,并使用%字符限制显示格式(此处需要在task_struct结构中提前记录变量所属类型和变量名)
3.输入gcc -c –I/usr/src/linux-2.4.20-8/include –Wall xxx.c进行编译,并使用ls查看编译成功显示xxx.o文件.
4.输入insmod xxx.o进行挂载,显示挂载成功.
5.输入dmesg查看日志信息显示十列,其中第一列为变量名.
6.输入rmmod xxx取消挂载,显示Quit等信息.
🌍2.4 研究过程
🌍2.5 研究心得
- 深入理解用户空间和内核空间: 通过本次试验,我加深了对用户空间和内核空间的理解。特别是在研究进程结构和管理原理时,我意识到这两个空间的界限对于操作系统的正常运行至关重要。了解了task_struct结构体的成员变量,并发现进程通过双向循环链表连接,这进一步加深了我对用户空间和内核空间交互的认识。
- 掌握进程结构及管理原理: 在课程设计中,我通过查询task_struct结构体,深入了解了进程的结构和管理原理。了解到进程通过task_struct的next_task和prev_task成员变量形成链表,而通过指针操作,可以灵活地管理和控制进程。这为我理解操作系统中进程管理的底层机制提供了实际案例和经验。
- 挑战和优化显示格式: 在进行dmesg显示的表头格式设置时,我面临了一些挑战,特别是在限定格式时遇到了显示不全的问题。我通过采用空格限制和调整%限定符的方式,虽然较为笨拙但在不断的尝试中,我找到了较为美观和有效的显示格式。这过程中,我也学到了通过编译和挂载等方式进行实时调试和优化的重要性,为后续的实际项目开发积累了经验。
📝总结
Linux操作系统的领域就像一片未被勘探的信息大海,引领你勇敢踏入开源系统的神秘领域。这是一场独特的学习冒险,从基本概念到系统架构,逐步揭示更深层次的操作系统原理、命令行工具和高级系统管理的奥秘。