计算机操作系统教程实验
实训实验报告

实验名称:计算机操作系统原理实训实验日期:2023年4月10日实验地点:计算机实验室一、实验目的1. 理解操作系统基本原理,掌握操作系统的基本功能和模块。
2. 熟悉操作系统的实验环境,能够进行基本的实验操作。
3. 通过实验加深对操作系统原理的理解,提高动手能力。
二、实验内容1. 操作系统概述2. 进程管理3. 内存管理4. 文件系统5. I/O系统三、实验步骤1. 操作系统概述(1)了解操作系统的定义、功能和模块。
(2)掌握操作系统的基本类型,如批处理系统、分时系统和实时系统。
2. 进程管理(1)理解进程的概念、状态和生命周期。
(2)掌握进程调度算法,如先来先服务(FCFS)、短作业优先(SJF)和轮转(RR)。
(3)编写一个简单的进程调度程序,实现不同调度算法。
3. 内存管理(1)了解内存管理的目的和方法,如分页、分段和段页式。
(2)掌握内存分配算法,如首次适配(First Fit)、最佳适配(Best Fit)和最坏适配(Worst Fit)。
(3)编写一个简单的内存分配程序,实现不同分配算法。
4. 文件系统(1)了解文件系统的概念、功能和层次结构。
(2)掌握文件系统的主要操作,如创建、删除、打开、关闭和读写。
(3)编写一个简单的文件系统程序,实现文件的基本操作。
5. I/O系统(1)了解I/O系统的概念、功能和层次结构。
(2)掌握I/O设备管理,如中断、DMA和通道。
(3)编写一个简单的I/O系统程序,实现设备的基本操作。
四、实验结果与分析1. 操作系统概述通过实验,我们了解了操作系统的定义、功能和模块,掌握了操作系统的基本类型。
实验结果表明,操作系统是计算机系统中不可或缺的部分,它负责管理和协调计算机硬件资源,为用户提供良好的使用环境。
2. 进程管理通过实验,我们掌握了进程的概念、状态和生命周期,熟悉了进程调度算法。
实验结果表明,进程管理是操作系统中的重要组成部分,它能够有效地提高计算机系统的资源利用率。
操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。
实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。
三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。
通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。
2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。
通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。
在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。
(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。
通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。
2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。
在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。
(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。
计算机操作系统实验报告

计算机操作系统实验报告一、实验目的本次计算机操作系统实验的主要目的是深入了解操作系统的工作原理和功能,通过实际操作和观察,增强对操作系统概念的理解,提高解决实际问题的能力。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio 20193、编程语言:C++三、实验内容1、进程管理实验创建多个进程,并观察它们的执行顺序和资源占用情况。
使用进程控制块(PCB)来跟踪进程的状态变化,如就绪、运行、阻塞等。
2、内存管理实验模拟内存分配和回收算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察不同算法在内存利用率和分配效率方面的表现。
3、文件系统实验创建、读取、写入和删除文件,了解文件的操作流程。
研究文件的存储结构和目录管理方式。
4、线程同步与互斥实验使用互斥锁和信号量来实现线程之间的同步和互斥操作。
观察在多线程环境下资源竞争和同步的效果。
四、实验步骤1、进程管理实验步骤编写 C++程序,使用系统调用创建多个进程。
在每个进程中输出进程的标识符和当前执行时间。
通过观察控制台输出,分析进程的执行顺序和资源占用情况。
2、内存管理实验步骤实现不同的内存分配算法,并在程序中模拟内存请求和释放的过程。
记录每次内存分配和回收的结果,计算内存利用率和分配时间。
3、文件系统实验步骤使用文件操作函数创建文件,并写入一些数据。
读取文件中的数据,并将其输出到控制台。
删除文件,观察文件系统的变化。
4、线程同步与互斥实验步骤创建多个线程,共享一些公共资源。
在访问公共资源的代码段前使用互斥锁或信号量进行同步控制。
观察线程的执行结果,确保资源的正确访问和修改。
五、实验结果与分析1、进程管理实验结果与分析实验结果显示,进程的执行顺序是不确定的,取决于操作系统的调度策略和进程的优先级。
资源占用情况也因进程的不同而有所差异,一些进程可能占用较多的 CPU 时间和内存,而另一些则相对较少。
2、内存管理实验结果与分析首次适应算法在分配速度上较快,但容易产生内存碎片。
《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
大学计算机基础实验1-操作系统实验

操作系统实验(一)Windows系统基本操作【实验目的】1.掌握Windows的启动与关闭。
2.了解Windows桌面的组成。
3.掌握鼠标器的操作方法。
4.掌握汉字输入法的选用。
5.了解使用帮助系统的基本方法。
6.掌握任务栏和开始菜单的设置与使用。
7.使用“我的电脑”与“资源管理器”浏览计算机。
8.掌握桌面对象、快捷方式的建立、删除。
9.掌握回收站的使用。
【实验内容】1.Windows的启动与关闭。
(1)根据上机的实验环境登录进入Windows系统(登录名和密码由任课教师指定),观察Windows 系统桌面的组成。
(2)关闭Windows。
2.鼠标的基本操作练习,要求如下;(1)用鼠标的“拖曳”操作在桌面上移动“我的电脑”的图标。
(2)用鼠标的“单击”、“双击”和“右键单击”打开“我的电脑”窗。
(3)用鼠标的“拖曳”操作改变“我的电脑”窗口的大小和在桌面上的位置。
3.对话框的基本操作练习,要求如下:双击图1.1 任务栏用鼠标“双击”图1.1所示任务栏右端的时间区域,打开“日期/时间属性”对话框,修改计算机的日期和时间。
4.使用Windows帮助系统。
(1)通过“开始∣帮助”命令或“我的电脑”、“网上邻居”等窗口中的“帮助”菜单命令打开Windows帮助窗口。
(2)单击“目录”标签,单击“文件和文件夹”书籍图标,在展示的主题项和下级书目中,查找某主题项,例如“文件和文件夹概述”主题项。
(3)单击“索引”标签,通过在文本框内键入关键字获取帮助信息。
本题要求输入关键字:“窗口”,查找有关“Windows 资源管理器”的帮助信息。
(4)单击“搜索”标签,通过在文本框内键入关键字列出与其相关的帮助主题。
本题要求输入关键字“快捷键”,然后单击“列出主题”,Windows 帮助窗口的左下方将列出相应主题。
选择“Windows 快捷键”主题。
5.使用“我的电脑”浏览计算机,说明以下各个图标代表的对象。
6.使用任务栏上的“开始”按钮和工具栏浏览计算机。
操作系统安装与配置实验报告

操作系统安装与配置实验报告操作系统安装与配置实验报告。
一、实验目的。
本次实验的目的是学习和掌握操作系统的安装与配置方法,了解操作系统的基本概念和原理,以及掌握操作系统的基本操作和常用命令。
二、实验过程。
1. 实验环境准备。
在实验开始之前,我先准备了一台计算机和相关的安装光盘或镜像文件。
我选择了Windows 10操作系统进行安装和配置。
2. 操作系统安装。
我按照实验指导书的步骤,先将安装光盘或镜像文件插入计算机,并重启计算机。
然后按照提示进入安装界面,选择安装语言、键盘布局等选项。
接着,我选择了自定义安装,对硬盘进行分区和格式化。
最后,我填写了计算机的用户名和密码,完成了操作系统的安装。
3. 操作系统配置。
安装完成后,我进行了一些基本的操作系统配置。
首先,我设置了计算机的名称和网络设置,以便与其他设备进行通信。
然后,我进行了系统更新,安装了最新的补丁和驱动程序,以确保系统的安全性和稳定性。
接下来,我调整了系统的显示设置、声音设置和电源管理等选项,以适应个人的使用习惯。
最后,我安装了一些常用的软件和工具,以提高工作效率。
三、实验结果。
经过以上的操作,我成功地安装和配置了操作系统。
系统运行稳定,各项功能正常。
我能够使用操作系统的基本功能,如文件管理、应用程序运行等。
同时,我也学会了一些常用的命令,如文件夹的创建、复制、删除等。
四、实验总结。
通过本次实验,我对操作系统的安装与配置有了更深入的了解。
我学会了如何安装操作系统,并对系统进行基本的配置和优化。
同时,我也掌握了一些常用的操作系统命令,提高了自己的操作能力。
在今后的学习和工作中,我将能够更好地使用操作系统,并解决一些常见的问题。
总之,本次实验对我来说是一次很有意义的学习和实践机会。
通过实际操作,我不仅巩固了课堂上学到的知识,还提高了自己的实际操作能力。
我相信,通过不断地学习和实践,我将能够更好地掌握操作系统的安装与配置方法,并在将来的工作中发挥更大的作用。
操作系统实验教程
操作系统实验教程一、实验原理和环境搭建(大约200字)在开始实验之前,学生需要了解操作系统的基本原理,包括进程管理、文件管理、内存管理、设备管理等。
同时,需要搭建一个合适的实验环境,可以选择使用虚拟机软件搭建一台虚拟机,并安装一个操作系统作为实验环境。
二、实验内容和步骤(大约500字)1.进程管理实验:学生可以编写一个简单的多进程程序,用于展示进程的创建、调度和终止过程。
学生需要了解进程状态的转换和调度算法,例如FCFS、SJF、RR等。
实验的步骤包括定义进程控制块、创建进程、调度进程以及进程间的通信与同步。
2.文件管理实验:学生可以编写一个简单的文件管理系统,实现文件的创建、打开、读写和关闭等基本操作。
学生需要了解文件的组织方式、目录结构以及文件的读写权限等。
实验的步骤包括设计文件系统的结构、实现文件的创建和打开、实现文件的读写和关闭。
3.内存管理实验:学生可以编写一个简单的内存管理程序,模拟操作系统的内存分配和释放过程。
学生需要了解内存的组织方式、分页和分段机制以及虚拟内存管理等。
实验的步骤包括设计内存管理的数据结构、实现内存的分配和释放以及处理内存碎片等。
4.设备管理实验:学生可以编写一个简单的设备管理程序,模拟操作系统的设备分配和使用过程。
学生需要了解设备的组织方式、设备驱动程序以及设备中断处理等。
实验的步骤包括定义设备控制块、实现设备的分配和释放、处理设备中断以及设备的并发访问控制等。
三、实验结果和分析(大约300字)在完成实验后,学生需要对实验结果进行分析和总结。
他们可以关注实验中遇到的问题、解决问题的方法和改进的方向。
同时,还应该对实验的原理和实现进行评估和比较,以加深对操作系统的理解。
四、实验报告撰写(大约200字)每个实验都需要撰写实验报告,报告应包括实验目的、实验环境、实验内容、实验步骤、实验结果和分析等部分。
学生需要清晰地描述实验过程和思路,并附上相关的代码和截图。
报告应该具备清晰、准确和完整的特点,并体现出学生的思考和改进。
《操作系统》课程实验报告
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。
同时,实现进程的正常终止和异常终止,并分析其对系统的影响。
2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。
通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。
(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。
(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。
(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。
2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。
(2)创建多个进程,模拟对共享资源的并发访问。
(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。
(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
《操作系统》实验二
《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。
通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。
二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。
b.设计一个简单的进程调度算法,如轮转法或优先级调度法。
c.实现进程间的通信机制,如共享内存或消息队列。
2、线程调度a.实现线程的创建、撤销和调度。
b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。
3、内存管理a.设计一个简单的分页内存管理系统。
b.实现内存的分配和回收。
c.实现一个简单的内存保护机制。
4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。
b.实现文件的存储和检索。
c.实现文件的备份和恢复。
三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。
b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。
可以使用模拟的方法,不需要真实的硬件环境。
c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。
2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。
b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。
同样可以使用模拟的方法。
3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。
b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。
可以使用模拟的方法。
4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。
b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。
计算机操作系统实验报告
实验名称:操作系统原理与实现实验日期:2021年10月15日实验班级:计算机科学与技术1班实验目的:1. 理解操作系统的基本概念和功能。
2. 掌握操作系统的基本原理和实现方法。
3. 通过实验加深对操作系统核心功能的理解。
实验内容:一、实验背景操作系统是计算机系统中最重要的系统软件之一,它负责管理和控制计算机硬件与软件资源,为用户提供一个良好的工作环境。
本次实验旨在通过实践操作系统的基本原理和实现方法,加深对操作系统核心功能的理解。
二、实验环境1. 操作系统:Windows 102. 开发环境:Visual Studio 20193. 实验工具:C++语言三、实验步骤1. 创建一个简单的进程管理器(1)定义进程结构体```cppstruct Process {int pid; // 进程IDint priority; // 进程优先级int status; // 进程状态(0:就绪,1:运行,2:阻塞,3:结束)// ... 其他进程信息};```(2)初始化进程表```cppconst int MAX_PROCESS = 10; // 最大进程数Process process[MAX_PROCESS]; // 进程表```(3)实现进程调度算法```cpp// 实现先来先服务(FCFS)调度算法void fcfsSchedule() {for (int i = 0; i < MAX_PROCESS; i++) {if (process[i].status == 0) { // 就绪状态 process[i].status = 1; // 运行状态// ... 执行进程process[i].status = 3; // 结束状态}}}```(4)实现进程创建、销毁和阻塞```cpp// 创建进程void createProcess(int pid, int priority) {for (int i = 0; i < MAX_PROCESS; i++) {if (process[i].pid == 0) { // 找到空闲进程 process[i].pid = pid;process[i].priority = priority;process[i].status = 0;break;}}}// 销毁进程void destroyProcess(int pid) {for (int i = 0; i < MAX_PROCESS; i++) {if (process[i].pid == pid) {process[i].pid = 0;process[i].priority = 0;process[i].status = 0;break;}}}// 阻塞进程void blockProcess(int pid) {for (int i = 0; i < MAX_PROCESS; i++) {if (process[i].pid == pid) {process[i].status = 2; // 阻塞状态 break;}}}```2. 创建一个简单的文件系统(1)定义文件结构体```cppstruct File {int fileID; // 文件IDchar fileName[50]; // 文件名int fileSize; // 文件大小// ... 其他文件信息};```(2)初始化文件表```cppconst int MAX_FILE = 10; // 最大文件数File file[MAX_FILE]; // 文件表(3)实现文件操作```cpp// 创建文件void createFile(int fileID, const char fileName, int fileSize) { for (int i = 0; i < MAX_FILE; i++) {if (file[i].fileID == 0) { // 找到空闲文件file[i].fileID = fileID;strcpy(file[i].fileName, fileName);file[i].fileSize = fileSize;break;}}}// 删除文件void deleteFile(int fileID) {for (int i = 0; i < MAX_FILE; i++) {if (file[i].fileID == fileID) {file[i].fileID = 0;file[i].fileSize = 0;break;}}// 打开文件void openFile(int fileID) {// ... 打开文件操作}// 关闭文件void closeFile(int fileID) {// ... 关闭文件操作}```四、实验结果与分析通过本次实验,我们成功实现了进程管理器和文件系统的基本功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信号量(集)的初始化以及删除:
系统调用semctl()
原型:int semctl(int semid,int semnum,int cmd[,union semun arg]); 返回值:如果成功,返回一个非负数;失败,则返回-1。 参数cmd中常使用的命令如下: SETVAL: 设置信号量集中的一个单独的信号量的值。
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main(void) { pid_t pid ; int data = 4; if(0==(pid=fork()))//子进程 { data += 1; printf("SubProcess : %d\n ",data);
参数:thread:所创建的线程号。
attr:所创建的线程属性。 start_routine:即将运行的线程函数。 art:传递给线程函数的参数。 2)线程挂起: int pthread_join(pthread_t th, void **thread_retrun);
返回值:成功-返回0,失败-返回错误编号
注意事项
6) struct Person{char *name;int age}*p;
p->name = "zhangsan"; p->age = "22"; 此写法是错误的; 正确的写法是:
struct Person{char *name;int age}*p;
注意事项
1) 在Ubuntu中编译程序的时候,注意要将-lpthread 加到被编译的文件名之后,否则编译会出错; 2) semid和data应该定义为全局变量,否则创建的子 线程访 问不到; 3) 子线程执行的函数的返回值如果没有定义为void *,那么 在创建子线程的时候,要在参数前加上(void*); 4) rehhat linux:#include<sys/sem.h> Ubuntu:加入#include<linux/sem.h>不要包含头 文件sys/ipc.h 5)IPC_CREAT不要写错;不是IPC_CREATE
} else//父进程 {
exit(0);
wait(NULL);//或者waitpid(pid,NULL);
}
} return 0;
data += 2; printf("MainProcess : %d\n",data);
//wait:只要有一个子进程返回,父进程就继续执行 //waitpid:只有当pid返回时,父进程才返回;
返回
Linux进程查看
ps命令 该命令可以确定有哪些进程正在运行和运行的状态、 进程是否结束、进程有没有僵死、哪些进程占用了 过多的资源等等
语法格式如下: ps [选项] 常用选项说明: -e 显示所有进程部分信息。 -f 显示某一进程详细信息。
一个简单的进程创建程序
//资源empty初始化为1 semopts.val = 1; res=semctl(semid,0,SETVAL,semopts); //资源data初始化为0 semopts.val = 0; res=semctl(semid,1,SETVAL,semopts);
返回
线程
1)线程创建
int pthread_create( pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *),void *arg ); 返回值:成功-返回0,失败-返回错误编号
IPC_RMID: 将信号量集从内存中删除;
示例: 初始化信号量集:arg.val=1;semctl(semid,1,SETVAL,arg)
删除信号量集:semctl(semid,0,IPC_RMID);
示例:
union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned short *array; /* Array for GETALL, SETALL */ struct seminfo *__buf; /* Buffer for IPC_INFO*/ } semopts;
void P(int semid,int index) //对标记符为semid的信号量集 中的第index个 //元素进行P操作(信号量操作要用到semop()函数) { struct sembuf sem; //此数据类型在sys/sem.h中定义 sem.sem_num = index;//对信号量集中的第index个元素进行P操作 sem.sem_op = -1; //表示P操作 sem.sem_flg = 0; //操作标记:0或IPC_NOWAIT等 semop(semid,&sem,1); //1:要操作1个信号量 }
Linux文件编辑器VI
什么是Vi:Linux古老但功能强大的全屏幕编辑器
Vi的启动方式:
--$vi 文件名 打开已有的文件或编辑新文件
--$vi
先编辑,以后命名存盘
VI的模式
Vi的三种模式 命令模式 :使用编辑命令; 插入模式 :做文字输入; 末行模式 :离开编辑器,或者设置编辑环境, 如寻找字串、列出行号等。
利用GCC编译器编译程序得到目标文件 gcc fileName [-o executableFileName] [-lpthread] 执行目标文件: ./executableFileName 说明: 动态链接库libpthread.so不是Linux默认的库,所以在进 行链接的时候需要将其导入(通过-lpthread)
sem_num:将要处理的信号量的下标。 sem_op :要执行的操作类型; P:-1; V:1 sem_flg:操作标志:通常为SEM_UNDO或IPC_NOWAIT nsops:表明要操作的信号量的个数
void V(int semid,int index) //对标记符为semid的信号量集 中的第index个 //元素进行P操作(信号量操作要用到semop()函数) { struct sembuf sem; //此数据类型在sys/sem.h中定义 sem.sem_num = index;//对信号量集中的第index个元素进行P操作 sem.sem_op = 1; //表示V操作 sem.sem_flg = 0; //操作标记:0或IPC_NOWAIT等 semop(semid,&sem,1);//1:表示要操作1个信号量 }
信号量(集)的创建:
使用系统调用semget()创建一个新的信号量集,或者存取一 个已经存在的信号量集. 原型:int semget(key_t key,int nsems,int semflg) 返回值:若成功,则返回信号量集的IPC标识符;失败返回-1. 参数:key:一般取ftok()函数返回值或一个整型常量 nsems:信号灯的个数 semflg:通常取值为IPC_CREAT | 0666 示例:int semid = semget(300,2,IPC_CREAT | 0666)
显示当前工作目录:pwd 文件相关操作:
ls: 显示文件信息 [-l;-a;-i;] cp: 拷贝文件 [-r] mv: 移动文件 touch: 创建文件 rm: 删除文件 [-rf ] mkdir: 新建文件夹 rmdir: 删除空白文件夹 cd: 切换工作目录 cd - ; cd ~; cd; chmod: 更改文件权限 chown: 更改文件所属用户及用户组 cat 、more 、less、 head 、tail:显示文件内容 ln [-s] 源路径 目标路径 返回
一个简单的线程创建程序
#include<stdio.h> #include<sys/types.h> #include<pthread.h> int
data; void sub1(void) { data += 1; printf("SubThread-->data=%d\n",data); } int main(void) { data = 4; pthread_t pthread1; pthread_create(&pthread1,NULL,(void*)sub1,NULL); pthread_join(pthread1,NULL); data += 1; printf("MainThread -->data=%d\n",data); return 0; }
系统调用semop():操作信号量
原型int semop(int semid,struct sembuf *sops,unsigned nsops); 返回值:成功返回0;失败返回1; struct sembuf//在sys/sem.h中有定义
{ ushort sem_num; short sem_op; short sem_flg; }
void *subp1()//计算线程 { int i; for (i=0;i<LOOPS;i++) { P(semid,0); a+=10; V(semid,1); } return; }
void *subp2()//打印线程 { int i,j; for (i=0; i< LOOPS;i++) { P(semid,1); printf("subp1:a=%d\n",a); V(semid,0); } return; }