嵌入式Linux中文站

Linux slab 分配器剖析

阅读(220)

动态内存管理 内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能: 最小化管理内存所需的时间 最大化用于一般应用的可用内存(最小化管理开销) 内存管理实际上是一种关于权衡的零和游戏。您可以开发一种使用少量内存进行管理的算法,但是要花费更多时间来管理可用内存。也可以开发一个算法来有效地管理内存,但却要使用更多的内存。最终,特定应用程序的需求将促使对这种权衡作出选择。 每个内存管理器都使用了一种基于堆的分配策略。在这种方法中,大块内存(称为堆)用来

内核比较: 2.6 内核中改进了内存管理

阅读(98)

随着 Linux 内核的发展和成熟,更多的用户期待着 Linux 可以运行非常大的系统来处理科学分析应用程序或者甚至海量数据库。这些企业级的应用程序通常需要大量的内存才能好好运行。2.4 Linux 内核有识别相当大数量的内存的功能,但是 2.5 内核发生了很多改变,使其有能力以更有效的方式处理更大量的内存。 反向映射 在 Linux 内存管理器中,页表保持对进程使用的内存物理页的追踪,它们将虚拟页映射到物理页。这些页中有一些可能不是长时间使用,它们应该被交换出去。不过,在它们可以被交换出去之前,必须找到

Linux 同步方法剖析

阅读(102)

本文讨论了 Linux 内核中可用的大量同步或锁定机制。这些机制为 2.6.23 版内核的许多可用方法提供了应用程序接口(API)。但是在深入学习 API 之前,首先需要明白将要解决的问题。 并发和锁定 当存在并发特性时,必须使用同步方法。当在同一时间段出现两个或更多进程并且这些进程彼此交互(例如,共享相同的资源)时,就存在并发现象。 在单处理器(uniprocessor,UP)主机上可能发生并发,在这种主机中多个线程共享同一个 CPU 并且抢占(preemption)创建竞态条件。抢占通过临时中断一个线

Linux如何利用容器轻松应对性能工程?

阅读(200)

导读 性能分析的价值超出了服务负载所需的计算资源或满足峰值需求所需的应用实例数量的估计。性能显然与成功企业的基本要素挂钩。它揭示了用户的总体体验,包括确定什么会拖慢客户预期的响应时间,通过设计满足带宽要求的内容交付来提高客户粘性,选择最佳设备,最终帮助企业发展业务。 应用程序的性能决定了软件能多快完成预期任务。这回答有关应用程序的几个问题,例如: 峰值负载下的响应时间 与替代方案相比,它易于使用,受支持的功能和用例 运营成本(CPU 使用率、内存需求、数据吞吐量、带宽等) 问题 当然,这是对业务服务的性能

Linux动态链接库的创建与使用

阅读(86)

Linux动态链接库的创建与使用 1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个程序函数库简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。 程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)和动态加载函数库(dynamically loaded libraries)。 静态函数库是在程序执

Linux 平台相关代码的 C++ 解决方案

阅读(123)

本文首先提出平台相关代码造成的两个问题,然后针对这两个问题循序渐进依次提出解决方案,在分析了前两个方案弱点的基础上,最后着重介绍一种基于多种 设计模式 的 Linux 平台相关代码的解决方案,并给出此方案的 C++ 实现。 Linux 平台相关代码带来的问题 目前市场上存在着许多不同的 Linux 平台(例如:RedHat, Ubuntu, Suse 等),各大厂商和社区都在针对自己支持的平台进行优化,为使用者带来诸多方便的同时也对软件研发人员在进行编码时带来不少问题: 由于程序中不可避免的存在平台相关代

在 Linux 中如何使用 gdb 调试 C 程序

阅读(176)

无论多么有经验的程序员,开发的任何软件都不可能完全没有 bug。因此,排查及修复 bug 成为软件开发周期中最重要的任务之一。有许多办法可以排查 bug(测试、代码自审等等),但是还有一些专用软件(称为调试器)可以帮助准确定位问题的所在,以便进行修复。 如果你是 C/C++ 程序员,或者使用 Fortran 和 Modula-2 编程语言开发软件,那么你将会很乐意知道有这么一款优秀的调试器 -GDB- 可以帮你更轻松地调试代码 bug 以及其它问题。在这篇文章中,我们将讨论一下 GDB 调试器的基础知识,

Linux中ifreq 结构体分析和使用

阅读(78)

结构原型: /* * Interface request structure used for socket * ioctls. All interface ioctls must have parameter * definitions which begin with ifr_name. The * remainder may be interface specific. */ struct ifreq { #define IFHWADDRLEN 6 union { char ifrn_name[ I