《Linux嵌入式实时应用开发实战(原书第3版)》——3.4 Linux进程模型

简介:

本节书摘来自华章计算机《Linux嵌入式实时应用开发实战(原书第3版)》一书中的第3章,第3.4节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 Linux进程模型

Linux中的基本结构元素是进程,由可执行代码和如数据、文件描述符等组成的资源组合组成。这些资源完全是受保护的,因此一个进程不能直接访问另一个进程的资源。为了使两个进程相互通信,它们必须使用Linux定义的中间进程通信机制,如共享存储区域或管道。
由于它在系统中建立了一个高级别的保护,所以工作良好。错误的进程会被系统检测出来并在它对其他进程造成破坏前将其抛出(图3-7)。但是在创建进程时的过度开销和使用中间进程通信机制的代价是昂贵的。


<a href=https://yqfile.alicdn.com/5f2dc7001d6602e11ebd42171ec66615575c13dd.png" >

一个线程只有代码。线程只存在于进程内部,一个进程中的所有线程都共享资源。因此所有的线程都可以同样地访问数据存储器和文件描述符。这个模型有时叫做轻量级多任务以与UNIX/Linux进程模型区分。
轻量级任务的优点是中间线程的通信更有效。它的缺点是任何线程都可以破坏其他线程的数据。多数的RTOS都曾经有类似轻量型的模型。当然最近几年,存储器保护的硬件花费明显下降,因此一些RTOS供应商开始提供他们系统的保护模式版本,这看起来像Linux进程模型。
3.4.1 fork()函数
Linux的生命从一个进程开始,这就是在启动时创建的init进程。系统中其他进程的创建都是通过调用fork()实现的。调用fork()的进程叫父进程,新创建的进程叫子进程。所以每个进程都有父和子,这取决于谁创建谁。
如果你是在一个多任务的操作系统中,这里的任务是函数通过调用任务创建服务生成的,那么fork进程看起来显然很奇怪。fork()函数创建一个父进程的副本——代码、数据、文件描述符和父进程目前拥有的其他任何资源。这可能会增加MB量级存储空间的复制。为避免复制许多可能被覆盖的东西,Linux引入了一个写时复制的策略。
fork()函数从复制进程数据结构和给子进程一个新的进程标识符(PID)开始。然后,复制一个页目录和页表。最开始,PTE均与父进程一样指向相同的物理页面。两个进程的所有页面都设置为只读。当其中的某一个进程试图写时,会引起一个页面错误。这会让Linux给该进程分配一个新页面,并复制现有页面的内容。
因为两个进程都执行同样的代码,所以它们都从fork()的返回值继续执行(这就是为什么很奇怪)。为了区分父进程和子进程,fork()给子进程返回一个函数值0,但是给父进程返回子进程的PID值。表3-1就是fork函数调用的一个小例子。


<a href=https://yqfile.alicdn.com/12432b9be37112b4a0bd649cc5c19bccf744c1bf.png" >

3.4.2 execve()函数
当然,99%的时间里都是子进程通过调用execve()激活一个新的程序来从磁盘导入一个可执行镜像文件。表3-2给出了一个简单的命令行注释器的架构形式。它从stdin读入一行文本,解析后调用fork()函数创建一个新进程。然后子进程调用execve()导入一个文件并执行之前输入的命令。execve()覆盖了调用进程的代码、数据和堆栈段。


<a href=https://yqfile.alicdn.com/f900e63585c73b45d306ae82b72b9a5882ad9734.png
" >

如果这是普通的前景命令,则命令解释器必须等到命令执行完毕。这是通过waitpid()来完成的,该函数阻塞调用进程直到与pid参数匹配的进程结束。注意,大部分的多任务操作系统没有能力阻塞一个挂起了另一个进程的进程或任务。
如果execve()成功了,它没有返回值,而是将控制传递至新载入的程序。
相关文章
|
5月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
335 10
|
5月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
533 13
|
4月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
9月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
9月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
654 5
|
10月前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
498 5
|
11月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
574 15
|
12月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
512 13
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
241 5
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###