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

【Windows】操作系统之任务管理器(第一篇)

一、操作系统简介

Windows操作系统是由微软公司(Microsoft)开发的一款图形操作系统,它以其强大的功能和广泛的用户基础,成为了目前世界上用户使用最多、兼容性最强的操作系统之一。以下是关于Windows操作系统的详细介绍:

一、历史与发展

  • 起源:Windows操作系统的历史可以追溯到1983年,当时微软推出了第一个版本Windows 1.0。随着时间的推移,Windows系统经历了多个版本的迭代和发展,逐渐成为了计算机领域的主导操作系统。
  • 重要版本:Windows系统的主要版本包括Windows XP、Windows 7、Windows 8、Windows 10以及最新的Windows 11等。每个版本都引入了新的功能和改进,以满足不同用户的需求。

二、主要功能

Windows操作系统具有多种核心功能,这些功能共同构成了其强大的计算机使用体验:

  1. 处理机管理:负责处理中断事件、处理器调度等,确保计算机能够高效地运行多个任务。
  2. 存储管理:管理存储器资源,为多道程序运行提供支撑,包括存储分配、存储共享、存储保护和存储扩充等功能。
  3. 设备管理:管理各类外围设备,完成用户提出的I/O请求,提高I/O设备的利用率。
  4. 文件管理:对系统的信息资源进行管理,实现文件的共享、保护和保密,保证文件的安全性。
  5. 网络与通信管理:支持多协议标准,如TCP/IP,提供Internet连接和网络管理功能。
  6. 用户接口:提供友好的用户接口,包括程序接口、命令接口和图形接口,方便用户与系统进行交互。

三、特点与优势

  1. 易用性:Windows操作系统具有直观的图形用户界面(GUI),易于理解和使用。
  2. 多任务处理能力:支持同时运行多个应用程序,提高工作效率。
  3. 安全性:具有强大的安全特性,如账户控制、权限控制、文件安全等,保护用户数据和设备安全。
  4. 稳定性:经过不断优化和改进,Windows操作系统具有很好的稳定性,能够减少崩溃和故障的发生。
  5. 网络支持:支持多协议标准,方便用户进行Internet连接和网络管理。
  6. 自动更新:提供定期更新服务,不断改进功能和修复故障,提升用户体验。

操作系统是硬件上面第一层软件,直接与硬件交流,在操作系统中安装了很多的软件,也就是所谓的程序,程序是静态的指令。它只占系统磁盘的空间。执行以后,变成进程,占系统内存。

二、程序如何变成进程?

程序的编译过程通常包括四个主要阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。下面将详细解释每个阶段的作用和主要任务。

1. 预处理(Preprocessing)

作用
预处理是编译过程的第一步,它主要处理源代码中的预处理指令(如#include、#define等),并准备源代码以便后续的编译阶段。

主要任务

  • 宏定义展开:将所有的#define删除,并展开所有的宏定义。
  • 处理预编译指令:如#if、#elif、#else、#endif等条件编译指令。
  • 头文件包含:处理#include预编译指令,将被包含的文件插入到预编译指令的位置。
  • 删除注释:删除所有的注释。
  • 添加行号信息:添加行号信息、文件名标识,便于调试。
  • 保留#pragma指令:因为在编写程序时,经常要用到#pragma指令来设定编译的状态或指示编译器完成一些特定的动作。

示例
使用GCC编译器时,可以通过gcc -E main.c -o main.i命令生成预处理后的文件(.i文件)。

2. 编译(Compilation)

作用
编译是将预处理后的源代码转换成汇编代码的过程。

主要任务

  • 词法分析:将源代码字符串分割成一系列的标记(tokens)。
  • 语法分析:根据语言的语法规则,将标记组织成语法树(或抽象语法树)。
  • 语义分析:检查语法树的语义正确性,并进行类型检查等。
  • 中间代码生成:从语法树生成中间代码,便于后续的优化和生成目标代码。
  • 目标代码生成:将中间代码转换成特定平台的汇编代码。

示例
使用GCC编译器时,可以通过gcc -S main.i -o main.s命令生成汇编代码文件(.s文件)。

3. 汇编(Assembly)

作用
汇编是将汇编代码转换成机器码(二进制指令)的过程。

主要任务

  • 指令翻译:根据汇编指令和特定平台的规则,将汇编指令翻译成二进制形式的机器码。
  • 符号表生成:生成符号表,其中包含了程序中使用的变量、函数等的地址信息。
  • 生成目标文件:将翻译后的机器码和符号表等信息打包成目标文件(.o文件或.obj文件)。

示例
使用GCC编译器时,可以通过gcc -c main.s -o main.o命令生成目标文件(.o文件)。

4. 链接(Linking)

作用
链接是将多个目标文件以及所需的库文件合并成一个可执行文件的过程。

主要任务

  • 符号解析:解析目标文件中的符号引用,确定每个符号的实际地址。
  • 重定位:根据符号的实际地址,修改目标文件中相关的引用地址。
  • 库文件合并:将程序中用到的库文件中的代码和数据合并到可执行文件中。
  • 生成可执行文件:最终生成一个可以在特定平台上运行的可执行文件。

示例
使用GCC编译器时,可以通过gcc main.o -o main命令将目标文件链接成可执行文件(main)。

综上所述,程序的编译过程是一个复杂且系统的过程,它涉及多个阶段和多个方面的知识和技术。通过这个过程,高级语言编写的源代码被转换成计算机可以直接执行的机器码。

三、应用 任务管理器

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <windows.h>
#include <tlhelp32.h>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
public:void showProcess();private slots:void on_pushButton_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//显示所有的进程showProcess();}Widget::~Widget()
{delete ui;
}void Widget::showProcess()
{//显示所有的进程PROCESSENTRY32  pe =  {sizeof(PROCESSENTRY32)};//1.获取操作系统的进程的链表,快照HANDLE hsnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if( INVALID_HANDLE_VALUE == hsnapShot)return;//2.获取链表的头bool bflag = Process32First(hsnapShot,&pe);//Qt 垃圾自动回收机制---- 对象树QString str;int i =0;while(bflag){//进程名称str = QString::fromWCharArray(pe.szExeFile);ui->tableWidget->setItem(i,0,new QTableWidgetItem(str));//进程idstr = QString::number(pe.th32ProcessID);ui->tableWidget->setItem(i,1,new QTableWidgetItem(str));//线程数str = QString::number(pe.cntThreads);ui->tableWidget->setItem(i,2,new QTableWidgetItem(str));//3.遍历链表bflag = Process32Next(hsnapShot,&pe);++i;}}void Widget::on_pushButton_clicked()
{//获取进程idint nRow = ui->tableWidget->currentRow();if(nRow == -1)return;QTableWidgetItem *pitem =  ui->tableWidget->item(nRow,1);//获取句柄int nProcessId = pitem->text().toInt();HANDLE hProcess= OpenProcess(PROCESS_TERMINATE,0,nProcessId);//结束进程if(hProcess){TerminateProcess(hProcess,-1);ui->tableWidget->removeRow(nRow);}
}

相关文章:

  • 车载音视频App框架设计
  • 前端pc和小程序接入快递100(跳转方式和api方式)====实时查询接口
  • Self-supervised Learning for Pre-Training 3D Point Clouds: A Survey
  • 如何免费用java c#实现手机在网状态查询
  • 【Apache POI】Java解析Excel文件并处理合并单元格-粘贴即用
  • Java 在PDF中替换文字(详解)
  • Google资深工程师深度讲解Go语言-课程笔记
  • 一个简单的springboot应用搭建过程
  • 第2部分:物联网模式在行动
  • Vue进阶之Vue无代码可视化项目(七)
  • 口袋奇兵游戏攻略:云手机辅助战锤入侵策略指南!
  • 防御综合实验作业2
  • Web开发:<br>标签的作用
  • 裸金属服务器
  • Java:Bean实体对象和Map互相转换
  • [笔记] php常见简单功能及函数
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • CentOS6 编译安装 redis-3.2.3
  • es的写入过程
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java基本数据类型之Number
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • node学习系列之简单文件上传
  • python学习笔记-类对象的信息
  • quasar-framework cnodejs社区
  • rc-form之最单纯情况
  • Web Storage相关
  • 对超线程几个不同角度的解释
  • 回流、重绘及其优化
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅谈Golang中select的用法
  • 一起参Ember.js讨论、问答社区。
  • 正则表达式
  • linux 淘宝开源监控工具tsar
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Spring Boot 分片上传文件
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • (0)Nginx 功能特性
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (备忘)Java Map 遍历
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net 7 上传文件踩坑
  • .NET C# 配置 Options
  • .net core 6 集成和使用 mongodb
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • []指针
  • [100天算法】-实现 strStr()(day 52)