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

做微信推送网站企业安全文化建设导则

做微信推送网站,企业安全文化建设导则,做家装图接单网站,apache 本地网站前言 在这篇文章中#xff0c;我将带领大家深入学习和理解Linux系统中的进程管理。无论你是初学者还是有一定经验的开发者#xff0c;相信这篇文章都会对你有所帮助。我们将详细讲解冯诺依曼体系结构、操作系统概念、进程管理、进程调度、进程状态、环境变量、内存管理以及其…前言 在这篇文章中我将带领大家深入学习和理解Linux系统中的进程管理。无论你是初学者还是有一定经验的开发者相信这篇文章都会对你有所帮助。我们将详细讲解冯诺依曼体系结构、操作系统概念、进程管理、进程调度、进程状态、环境变量、内存管理以及其他相关内容。 冯诺依曼体系结构 概述 冯诺依曼体系结构是现代计算机系统的基础。它由数学家兼物理学家冯·诺依曼于1945年提出至今仍被广泛应用于各种计算机系统中。冯诺依曼体系结构的核心思想是将程序和数据存储在同一存储器中并由中央处理器CPU按顺序读取和执行指令。通过这种方式计算机系统能够以更高效、更灵活的方式运行各种应用程序。 组成部分 冯诺依曼体系结构由以下几个主要部分组成 输入单元包括键盘、鼠标、扫描仪等设备用于向计算机输入数据和指令。中央处理器CPU包含运算器和控制器用于执行指令和处理数据。运算器负责执行各种算术和逻辑运算控制器负责指挥和协调各个部分的工作。内存用于存储程序和数据。内存分为随机存取存储器RAM和只读存储器ROMRAM用于存储正在运行的程序和数据ROM用于存储固化的程序和数据。输出单元包括显示器、打印机等设备用于输出计算结果和信息。 数据流动过程 在冯诺依曼体系结构中所有数据的输入和输出都必须经过内存。具体来说数据流动过程如下 用户通过输入单元如键盘输入数据。数据被存储在内存中。CPU从内存中读取指令和数据并进行处理。处理结果被写入内存。输出单元如显示器从内存中读取结果并显示给用户。 这种数据流动方式确保了计算机系统的统一和高效。以QQ聊天为例当你登录QQ并与好友聊天时输入的信息首先被存储在内存中CPU从内存中读取并处理这些信息处理后的信息再次存储在内存中最后通过显示器输出。若你发送文件文件数据也会经过相同的路径流动确保信息传递的可靠性。 操作系统Operating System 概念 操作系统OS是管理计算机硬件和软件资源的系统软件负责为用户提供一个良好的操作环境。操作系统的核心部分是内核它负责进程管理、内存管理、文件管理和驱动管理等。此外操作系统还包括一些其他程序如函数库和Shell程序。操作系统的功能可以概括为两个方面资源管理和用户接口。 设计目的 操作系统的设计目的是 与硬件交互管理计算机的所有硬件资源如CPU、内存、磁盘和输入输出设备。操作系统通过设备驱动程序与硬件进行交互确保硬件设备能够被正确使用。提供执行环境为用户程序应用程序提供一个良好的执行环境使用户能够方便地开发和运行应用程序。操作系统提供了丰富的系统调用和库函数简化了应用程序的开发过程。 定位 在计算机软硬件架构中操作系统的定位是一款“管理”软件。它通过描述和组织被管理对象实现对系统资源的有效管理。例如操作系统通过使用结构体struct描述硬件资源通过链表或其他高效数据结构组织这些资源从而实现对资源的管理。 系统调用和库函数 操作系统通过系统调用向上层开发者暴露部分接口供其使用。系统调用提供了基本的功能而库函数对系统调用进行了封装提供了更高层次的接口方便用户进行二次开发。例如文件操作的系统调用包括open、read、write等而C标准库中的fopen、fread、fwrite等函数则对这些系统调用进行了封装使得文件操作更加方便和易于理解。 进程Process 基本概念 进程是程序的一个执行实例代表正在运行的程序。进程是操作系统资源分配的基本单位负责管理CPU时间、内存和其他资源。在内核中进程被描述为一个分配系统资源的实体。每个进程都有自己独立的地址空间、堆栈以及文件描述符表。 描述进程—PCB 进程信息存储在一个叫做进程控制块PCB的数据结构中。PCB包含了进程的所有属性是操作系统管理进程的核心数据结构。在Linux操作系统中PCB被实现为task_struct结构体。 task_struct内容分类 task_struct包含以下内容 标示符描述进程的唯一标示符用于区分其他进程。状态任务状态、退出代码、退出信号等。优先级相对于其他进程的优先级。程序计数器程序中即将被执行的下一条指令的地址。内存指针包括程序代码和进程相关数据的指针以及与其他进程共享的内存块的指针。上下文数据进程执行时处理器寄存器中的数据。I/O状态信息包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表。记账信息可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等。其他信息其他与进程相关的信息。 组织进程 在Linux内核中所有运行的进程都以task_struct链表的形式存在内核中。通过这种方式操作系统可以高效地管理和调度进程。每个task_struct结构体都包含指向下一个进程的指针这样所有进程就形成了一个双向链表操作系统可以方便地遍历和管理这些进程。 查看进程 用户可以通过/proc文件系统查看进程的信息。例如要获取PID为1的进程信息可以查看/proc/1文件夹。此外用户还可以使用top和ps等命令行工具获取进程信息。ps命令可以显示系统中所有正在运行的进程及其详细信息而top命令则可以动态地显示系统资源的使用情况和进程状态。 示例代码 以下示例代码展示了如何使用ps命令查看系统中所有进程的信息 ps -aux该命令输出的信息包括进程ID、用户ID、CPU使用率、内存使用率、进程状态、命令名称等。 进程状态 进程的不同状态 在Linux内核中进程可以处于以下几种状态 R运行状态表明进程正在运行或在运行队列中等待运行。S睡眠状态表明进程在等待事件完成有时也称为可中断睡眠interruptible sleep。D磁盘休眠状态有时也称为不可中断睡眠状态uninterruptible sleep通常等待I/O操作完成。T停止状态进程被停止可以通过发送SIGSTOP信号暂停进程通过SIGCONT信号恢复运行。X死亡状态进程已经终止不会出现在任务列表中。Z僵尸状态进程已经终止但其退出状态还没有被父进程读取保持在进程表中。 查看进程状态 用户可以通过ps、top等命令查看进程状态。例如使用ps aux命令可以查看系统中所有进程及其状态。以下是ps aux命令的示例输出 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 22568 1196 ? Ss 10:00 0:01 /sbin/init root 672 0.00.3 37644 3312 ? Ss 10:00 0:02 /usr/sbin/sshd在输出信息中STAT字段表示进程的状态。例如Ss表示进程处于睡眠状态且是会话领导进程R表示进程正在运行。 示例代码 以下示例代码展示了如何使用top命令动态查看系统资源使用情况和进程状态 top在top命令界面中用户可以看到系统的总体资源使用情况包括CPU、内存和交换分区的使用率以及所有正在运行的进程的信息。用户可以通过按k键终止进程通过按r键调整进程的优先级。 僵尸进程Zombie Process 概念与形成原因 僵尸进程是已经终止但其退出状态尚未被父进程读取的进程。当子进程退出后父进程需要通过wait或waitpid系统调用读取子进程的退出状态否则子进程会保持在僵尸状态。僵尸进程的出现是由于父进程没有及时回收子进程的资源导致子进程的信息无法从系统中清除。 危害 僵尸进程会占用系统资源特别是进程控制块PCB中的内存资源。如果大量僵尸进程存在会导致系统资源枯竭影响系统性能和稳定性。此外僵尸进程的存在还可能影响系统的正常运行和维护因为系统管理员可能会误以为这些进程仍在运行。 解决方法 通过在父进程中使用wait或waitpid函数可以避免僵尸进程。例如父进程可以在子进程终止时调用wait函数读取子进程的退出状态从而释放其占用的资源。以下是一个示例代码展示了如何在父进程中使用wait函数回收子进程的资源 #include stdio.h #include stdlib.h #include sys/types.h #include sys/wait.h #include unistd.hint main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) {printf(Child process\n);sleep(2);exit(0);} else {printf(Parent process\n);wait(NULL); // 回收子进程资源printf(Child process terminated\n);}return 0; }在这个示例中父进程通过调用wait函数等待子进程终止并回收其资源避免了僵尸进程的产生。 孤儿进程Orphan Process 概念与形成原因 孤儿进程是其父进程已经终止但子进程仍在运行的进程。孤儿进程会被系统的1号进程init进程收养并由init进程负责回收资源。孤儿进程的产生通常是由于父进程异常终止或故意终止而子进程仍需要继续执行其任务。 危害与处理 孤儿进程不会对系统造成危害因为它们会被init进程收养并管理。操作系统通过这种机制确保所有进程都能被正确管理和回收。以下是一个示例代码展示了孤儿进程的形成过程 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) {// 子进程sleep(5); // 保证子进程在父进程退出后继续运行printf(Child process: parent PID %d\n, getppid());exit(0);} else {// 父进程printf(Parent process\n);exit(0); // 父进程立即退出}return 0; }在这个示例中父进程立即退出子进程在父进程退出后继续运行此时子进程成为孤儿进程并被init进程收养。通过在子进程中打印父进程的PID可以验证子进程在成为孤儿进程后其父进程PID会变为1init进程的PID。 进程优先级 基本概念 进程优先级决定了进程获得CPU时间的先后顺序。优先级高的进程优先获得CPU资源从而更快地执行。Linux系统中用户可以通过调整进程的nice值来改变进程的优先级。nice值的范围为-20到19值越小优先级越高。 查看进程优先级 用户可以使用ps -l命令查看进程的优先级和nice值。例如 ps -l输出信息中包含以下重要字段 UID执行者的身份。PID进程ID。PPID父进程ID。PRI进程的优先级值越小优先级越高。NI进程的nice值。 调整进程优先级 用户可以使用nice命令启动一个具有特定优先级的进程也可以使用renice命令调整已有进程的优先级。例如 nice -n 10 ./myprogram renice -n -5 -p 12345以下是一个示例代码展示了如何使用nice命令启动一个具有特定优先级的进程 nice -n -10 ./myprogram在这个示例中myprogram程序将以较高的优先级运行因为其nice值被设置为-10。 示例代码 以下是一个完整的示例代码展示了如何调整进程的优先级并查看其效果 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) {// 子进程int ret nice(-10); // 设置较高优先级if (ret -1) {perror(nice);}printf(Child process: nice value %d\n, ret);while (1) {// 子进程持续运行观察优先级的影响}} else {// 父进程printf(Parent process\n);while (1) {// 父进程持续运行观察优先级的影响}}return 0; }运行该程序后可以使用ps -l命令查看子进程和父进程的优先级和nice值并观察其在系统中的表现。 环境变量 基本概念 环境变量是操作系统中用来指定操作系统运行环境的一些参数。在编写C/C代码时编译器可以通过环境变量查找所需的动态或静态库。环境变量通常具有全局特性可以影响系统中的所有进程。 常见环境变量 PATH指定命令的搜索路径。当用户在终端中输入命令时系统会在PATH指定的目录中搜索可执行文件。HOME指定用户的主工作目录即用户登录到系统后的默认目录。SHELL指定当前Shell的路径通常是/bin/bash。 查看和设置环境变量 用户可以使用以下命令查看和设置环境变量 echo $PATH # 查看PATH环境变量 export MYVARHello, World! # 设置环境变量 unset MYVAR # 清除环境变量 env # 显示所有环境变量示例代码 以下是一个示例代码展示了如何在程序中获取和设置环境变量 #include stdio.h #include stdlib.hint main() {char *path getenv(PATH);if (path) {printf(PATH: %s\n, path);}setenv(MYVAR, Hello, World!, 1);printf(MYVAR: %s\n, getenv(MYVAR));return 0; }在这个示例中程序首先获取并打印PATH环境变量的值然后设置一个新的环境变量MYVAR并打印其值。 环境变量的全局属性 环境变量通常具有全局属性可以被子进程继承。例如通过export命令设置的环境变量可以在子进程 中访问 export MYVARHello, World! ./myprogram子进程运行时可以访问并打印MYVAR的值。 示例代码 以下是一个示例代码展示了环境变量的全局属性 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) {// 子进程printf(Child process: MYVAR %s\n, getenv(MYVAR));} else {// 父进程printf(Parent process\n);setenv(MYVAR, Hello from parent, 1);wait(NULL); // 等待子进程终止}return 0; }在这个示例中父进程设置了一个环境变量MYVAR子进程继承并打印了该环境变量的值。 进程地址空间 基本概念 进程地址空间是操作系统为每个进程分配的虚拟内存空间。在32位系统中进程地址空间通常为4GB。地址空间分为用户空间和内核空间用户空间用于存放用户程序和数据内核空间用于存放操作系统内核和内核数据。 虚拟地址与物理地址 虚拟地址是用户程序看到的地址而物理地址是内存中的实际地址。操作系统通过页表将虚拟地址映射到物理地址确保程序在运行时能够正确访问内存。 进程地址空间布局 进程地址空间通常包含以下几部分 代码段存放程序代码。数据段存放全局变量和静态变量。堆用于动态内存分配。栈用于函数调用时存放局部变量和返回地址。 示例代码 以下是一个简单的示例展示了进程地址空间的使用 #include stdio.h #include stdlib.h #include unistd.hint global_var 0;int main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) { // 子进程global_var 100;printf(Child: %d, %p\n, global_var, global_var);} else { // 父进程sleep(1);printf(Parent: %d, %p\n, global_var, global_var);}return 0; }运行该程序会显示父子进程中变量地址相同但值不同的现象说明虚拟地址相同但物理地址不同。通过这个示例可以理解虚拟地址和物理地址的区别以及进程地址空间的布局。 进程调度 调度算法 Linux内核使用多种调度算法来管理进程的执行顺序。常见的调度算法包括先来先服务FCFS、最短作业优先SJF、优先级调度Priority Scheduling和时间片轮转Round Robin。这些算法各有优缺点适用于不同的场景和需求。 O(1)调度算法 Linux 2.6内核采用了O(1)调度算法该算法确保调度操作的时间复杂度为常数不随进程数量增加而增加。O(1)调度算法使用两个队列来管理进程活动队列和过期队列。活动队列存放正在运行或准备运行的进程过期队列存放时间片已耗尽的进程。 活动队列与过期队列 活动队列存放正在运行或准备运行的进程。调度器从活动队列中选择优先级最高的进程进行调度。过期队列存放时间片已耗尽的进程。当活动队列中的进程全部运行完毕后调度器会将活动队列和过期队列交换重新开始调度。 示例代码 以下是一个示例代码展示了如何在Linux内核中实现进程调度 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t pid1, pid2;pid1 fork();if (pid1 0) {// 子进程1while (1) {printf(Child 1 running\n);sleep(1);}} else {pid2 fork();if (pid2 0) {// 子进程2while (1) {printf(Child 2 running\n);sleep(1);}} else {// 父进程while (1) {printf(Parent running\n);sleep(1);}}}return 0; }运行该程序后可以观察到父进程和两个子进程轮流执行展示了时间片轮转调度的效果。 环境变量的组织方式 环境表 每个程序都会收到一张环境表环境表是一个字符指针数组每个指针指向一个以\0结尾的环境字符串。 获取和设置环境变量 用户可以通过系统调用或库函数获取和设置环境变量。例如使用getenv和setenv函数可以访问特定的环境变量 #include stdio.h #include stdlib.hint main() {char *path getenv(PATH);if (path) {printf(PATH: %s\n, path);}setenv(MYVAR, Hello, World!, 1);printf(MYVAR: %s\n, getenv(MYVAR));return 0; }在这个示例中程序首先获取并打印PATH环境变量的值然后设置一个新的环境变量MYVAR并打印其值。 环境变量的全局属性 环境变量通常具有全局属性可以被子进程继承。例如通过export命令设置的环境变量可以在子进程中访问 export MYVARHello, World! ./myprogram子进程运行时可以访问并打印MYVAR的值。 示例代码 以下是一个示例代码展示了环境变量的全局属性 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) {// 子进程printf(Child process: MYVAR %s\n, getenv(MYVAR));} else {// 父进程printf(Parent process\n);setenv(MYVAR, Hello from parent, 1);wait(NULL); // 等待子进程终止}return 0; }在这个示例中父进程设置了一个环境变量MYVAR子进程继承并打印了该环境变量的值。 进程内存映像 程序地址空间回顾 程序地址空间通常包含代码段、数据段、堆和栈。在32位系统中地址空间分为用户空间和内核空间。用户空间用于存放用户程序和数据内核空间用于存放操作系统内核和内核数据。 虚拟地址与物理地址 虚拟地址是用户程序看到的地址而物理地址是内存中的实际地址。操作系统通过页表将虚拟地址映射到物理地址确保程序在运行时能够正确访问内存。 进程地址空间布局 进程地址空间通常包含以下几部分 代码段存放程序代码。数据段存放全局变量和静态变量。堆用于动态内存分配。栈用于函数调用时存放局部变量和返回地址。 示例代码 以下是一个简单的示例展示了进程地址空间的使用 #include stdio.h #include stdlib.h #include unistd.hint global_var 0;int main() {pid_t pid fork();if (pid 0) {perror(fork);return 1;} else if (pid 0) { // 子进程global_var 100;printf(Child: %d, %p\n, global_var, global_var);} else { // 父进程sleep(1);printf(Parent: %d, %p\n, global_var, global_var);}return 0; }运行该程序会显示父子进程中变量地址 相同但值不同的现象说明虚拟地址相同但物理地址不同。通过这个示例可以理解虚拟地址和物理地址的区别以及进程地址空间的布局。 总结 通过本文的学习我们详细介绍了Linux系统中的进程管理。从冯诺依曼体系结构、操作系统概念、进程管理、进程调度、进程状态、环境变量、内存管理等多个方面进行了深入讲解。掌握这些知识可以帮助我们更高效地管理和使用Linux系统。希望这篇文章对大家有所帮助。如果有任何问题或建议欢迎在评论区留言与我交流。感谢大家的阅读
http://www.dnsts.com.cn/news/34881.html

相关文章:

  • 亅新厦建设集团网站做网站卖机器怎么弄
  • 网站建设软件是什么意思深圳网站建设要多少钱
  • 网站服务器有哪些wordpress练习
  • 如何免费建站云南楚雄医药高等专科学校
  • 个性化网站制作wordpress免费采集
  • 建设网站类型网站怎么更改关键词
  • 做图片网站用什么程序wordpress仿站cms
  • 做系统之前的网站无锡网站的建设
  • 罗琳做的网站深圳市龙华区民治街道
  • 手机网站设计制作公司做网站怎么那么难
  • 网站建设策划书结束语昆明二级站seo整站优化排名
  • 春节网站怎么做价格低怎么说
  • 秦皇岛网站制作小程序开发宁波网站建设 网络服务
  • 网站推广制作附子seo
  • 别人做的网站不能用怎么办巴中交通建设有限公司网站
  • 精品课程网站建设总结报告天眼查询系统
  • 网站怎样做的高大上有错误的wordpress
  • 南京网站制作哪家专业外贸网站建设哪家有名
  • 六安城市网优选佛山网站关键词优化公司
  • 网站建设费钱吗wordpress怎么增加按钮
  • 免费画图网站平阴网站建设费用
  • 哈尔滨网站建设制作费用网页设计和网站制作
  • iis7发布网站教程做专题页的背景网站
  • 什么语言做网站快简诉网站建设的基本流程
  • 衡水高端网站建设动漫设计和动漫制作技术的区别
  • 如何提高网站收录量南昌公路建设有限公司网站
  • 长治一般建一个网站需要多少钱沈阳网站建设思路
  • 网站建设数据录入沈阳网站建站推广
  • 酒水食品做的好网站网站内容建设的原则是什么
  • 电子商务网站开发基础事件营销怎么做