死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请...
uCos是一个典型的按照优先级调度的操作系统,优先级高的任务先运行,优先级低的任务后运行,然而在任务的调度过程中可能会出现优先级翻转的情况。在嵌入式系统的应用中,实时性是一个重要的指标,而优先级翻转是影响系统实时性的重要问题。 例如:有优先级为A...
自旋锁 自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。比如有A、B两个处理器协同工作,如果A...
Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。32位的Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。 内核空间:内核空间表示运行在处理...
如何减少换页错误?() 1. 进程倾向于占用CPU 2. 访问局部性(localilty of reference)满足进程要求 3. 进程倾向于占用I/O 4. 使用基于最短剩余时间(shortest remaining time)的调度机制 5. 减少页大小 换页错误,一般称为缺页异常。每个进程都有一段自己...
在Linux下用户空间与内核空间数据交换的方式一 本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具...
本系列文章包括两篇,它们文详细地地介绍了Linux系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与sysfs、 sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使 用。本文是...
5个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收...
Linux大部分都是单内核的 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 微内核(Microkernelkernel)――在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息...
1、什么是堆栈? 2、一道微软的笔试题。 3、自己写的两个关于堆栈的例子? 4、如何动态申请二维数组? 一、什么是堆栈? 1、内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量...
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收...
Java把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量...
本来想继续顺着数据包的处理流程分析upcall调用的,但是发现在分析upcall调用时必须先了解linux中内核和用户空间通信接口Netlink机制,所以就一直耽搁了对upcall的分析。如果对Open vSwitch有些了解的话,你会发现其实Open vSwitch是在linux系统上运行的,因...
所有的TCP/IP调优参数都位于/proc/sys/net/目录。例如, 下面是最重要的一些调优参数,后面是它们的含义: 1、/proc/sys/net/core/rmem_max 最大的TCP数据接收缓冲 2、/proc/sys/net/core/wmem_max 最大的TCP数据发送缓冲 3、/proc/sys/net/ipv4/tcp_timestam...
众多的Linux用户在经历了对Linux由好奇到熟悉的过程之后,是否希望按照自己机器的实际配置对Linux进行定制,从而获得最佳的系统性能呢?也许有用户会认为在自己使用Linux的过程中没有碰到到任何问题,Linux确实象人们所宣传的那样永远不会崩溃,因此完全没有...
PS:RHEL/CentOS 6.x的系统服务比5.x系列的要多了很多新面孔,估计很多童鞋不甚理解,网上这方面资料也很少。理解这个对运维人员是必要的,因为开启不必要的服务越多,系统就相对越不安全。不需开启的服务尽量关闭。本人结合自己的应用经验做一些讲解说明,...
问题:我想要从源码创建安装的软件包。有没有一种方式从源码来创建和安装软件包,而不是运行make install?这样的话,以后如果我想,我可以容易的卸载程序。 如果你已经从它的源码运行make install安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的...
GLPI是非常优秀开源IT管理系统,包括资产统计、helpdesk等等功能,配合OCSNG还可以实现自动采集客户端软硬件信息。 虽然这套软件也有Windows版的,但Linux下的更加稳定,推荐在Linux上安装,本人之前写过一篇安装文章,那个时候为了收集中日文的计算机信息,...
给虚拟机加四块硬盘 /dev/sab,/dev/sdc,/dev/sdd,/dev/sde 第一:对硬盘的原始操作(四块硬盘的操作相同) [root@Redhat ~]#fdisk/dev/sd[b,c,d,e]//给硬盘分区 Command (m for help): n Command action eextended pprimary partition (1-4) p Partition num...
/proc/sys/kernel/printk文件定义了4个数字, 执行: cat/proc/sys/kernel/printk 4 4 1 7 ①控制台日志级别:优先级高于该值的消息将被打印至控制台。 ②缺省的消息日志级别:将用该值来打印没有优先级的消息。 ③最低的控制台日志级别:控制台日志级别可能...
Logwatch,顾名思义,是一款专门监测Linux log文件(日志文件)的软件。安装以后只要稍微配置一下,就能每天将主机的log分析文件发送至指定的邮箱。为什么要这么做?因为这样能节省一个个手动查看日志的繁琐,为管理员节省时间,节省精力。并且每天(甚至更频...
Logrotate的配置 Logrotate顾名思义就是log rotate ,即日志的轮换。Logrotate是Linux系统自身带的一个日志轮循程序,它的执行程序所在的目录是/usr/sbin/logrotate,是专门对各种系统日志(syslogd,mail)进行轮循的程序。该程序是由运行程序的服务crond来...
4.1 postfix的配置文件结构 postfix的配置文件位于/etc/postfix下,安装完postfix以后,我们可以通过ls命令查看postfix的配置文件: [root@mail postfix]# ls install.cf main.cf master.cf postfix-script 这四个文件就是postfix最基本的配置文件,它们的区...
第一:gprof工具 gprof工具是通过在执行的过程中往可执行文件中加入特殊的代码,随着可执行程序的运行而运行,从而记录执行情况,通过这个工具可以检测某个函数调用的次数和时间,这样的话就可以集中优化那个调用最为频繁的函数,来实现程序的优化。 这里是...
第一:DEBUG实例 [root@localhost debug]# vim null.c int a(int *p); int main(void) { int* p = 0; return a(p); } int a(int *p) { int y = *p; return y; } ~ [root@localhost debug]#ulimit-c unlimited [root@localhost debug]# gcc -Wallg null.c [ro...
[root@localhost ansi]#cpp -dM /dev/null//查看GCC内部自定义的宏 第一:通过使用宏去掉注释 [root@localhost ansi]# vim dtest.c #include stdio.h int main(void) { #ifdef TEST printf(Test mode\n); #endif printf(Tuning......\n); return 0; } 1、使...
第一:符合ansi标准的实例: [root@localhost ansi]# vim ansi.c #include stdio.h int main(void) { const char asm[] = 6502; printf(The string asm is %s\n,asm); return 0; } 首先用GNU C的标准来编译 [root@localhost ansi]# gcc -Wall -O ansi.c -o a...
静态库和动态库的区别: 静态库(xxx.a):GCC在编译生成可执行程序时,从静态库中提取必要的目标文件,在可执行程序编译成功时,同时包含了目标文件,这样带来的缺点是当多个可执行程序同时调用一个库文件时,加载到内存中的库文件可能存在重复,这是对内存...