共 32 篇文章 |
|
[cpp] view plain copy #define SCALE_PRIO(x, prio) \ max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO/2), MIN_TIMESLICE) static unsigned int task_timeslice(task_t *p) { if (p->static_prio < NICE_TO_PRIO(0)) return SCALE_PRIO(DEF_TIMESLICE*4, p->static_prio);if (prio < MAX_RT_PRIO) ... 阅32 转0 评0 公众公开 17-09-01 13:55 |
runqueue里,有几个成员是prio_array类型,这个东东就是优先队列,先看看它的定义:[cpp] view plain copy struct prio_array { unsigned int nr_active; 表示等待执行的进程总数 unsigned long bitmap[BITMAP_SIZE]; 一个unsigned long在内核中只有32位哈,大家要跟64位OS上的C程序中的long区分开,那个是64位的。好,优先级... 阅67 转1 评0 公众公开 17-09-01 13:55 |
这点很好理解,cpu1无事可作了,这时在cpu1上会调用load_balance,发现在cpu0上还有许多进程等待运行,那么它会从cpu0上的可运行进程里找到优先级最高的进程,拿到自己的runqueue里开始执行。例如,cpu0上一直有10个可运行进程,cpu1上一直有1个可运行进程,显然,cpu0上的进程们得到了不公平的对待,它们拿到cpu的时间要小得多,第1种情形下的... 阅43 转0 评0 公众公开 17-09-01 13:52 |
每一个节有一个虚地址(VMA)和一个载入地址(LMA);跟在关键字‘AT’后面的表达式LMA指定节的载入地址。或者,通过`AT>LMA_REGION''表达式,你可以为节的载入地址指定一个内存区域。比如,下面的连接脚本创建了三个输出节:一个叫做‘.text’从地址‘0x1000’处开始,一个叫‘.mdata’,尽管它的VMA是''0x2000''... 阅1 转自zhouADNjj 公众公开 17-04-07 15:02 |
对于这些目标文件格式,‘CONSTRUCTORS’命令告诉连接器把构造函数信息放到‘CONSTRUCTORS’命令出现的那个输出节中。对于像‘COFF’或‘ELF’这样支持专有节名的目标文件格式,GNU C++通常会把全局构造函数与析构函数的地址值放到''.ctors''和''.dtors''节中。当使用''.ctors''和''d... 阅2 转自zhouADNjj 公众公开 17-04-07 15:02 |
对于普通符号,需要一个特殊的标识, 因为在很多目标格式中, 普通符号没有一个特定的输入节. 连接器会把普通符号处理成好像它们在一个叫做''COMMON''的节中.比如,MIPS ELF目标文件格式区分标准普通符号和小普通符号。从文件''foo.o''中来的所有节''.input2''全部放入到输出节''outputb... 阅1 转自zhouADNjj 公众公开 17-04-07 15:02 |
输入节描述是最基本的连接脚本操作. 你使用输出节来告诉连接器在内存中如何布局你的程序. 你使用输入节来告诉连接器如何把输入文件映射到你的内存中.这个例子显示了通配符是如何被用来区分文件的. 这个连接脚本指示连接器把所有的''.text''节放到''.text''中, 把所有的''.bss''节放到'... 阅1 转自zhouADNjj 公众公开 17-04-07 15:02 |
ld链接脚本文件解析之三.在某些情况下, 一个符号被引用到的时候只在连接脚本中定义,而不在任何一个被连接进来的目标文件中定义. 这种做法是比较明智的. 比如, 传统的连接器定义了一个符号''etext''. 但是, ANSI C需要用户能够把''etext''作为一个函数使用而不会产生错误. ''PROVIDE''关键字可... 阅1 转自zhouADNjj 公众公开 17-04-07 15:02 |
除了FILENAME会成为第一个被连接的输入文件, ''STARTUP''命令跟''INPUT''命令完全相似, 就象这个文件是在命令行上第一个被指定的文件一样. 如果在一个系统中, 入口点总是存在于第一个文件中,那。''TARGET''命令在读取输入文件时命名BFD格式. 它会影响到后来的''INPUT''和'... 阅1 转自zhouADNjj 公众公开 17-04-07 15:01 |
int max(int val1, int val2){extern int max(int val1, int val2);可见无论是静态库(libcmp.a)还是动态库(libcmp.so)还是可执行文件(test),去掉一些符号信息后都减小了很多,但如果这时再链接这两个库的话是编不过的,因此,如果不是指定特殊的strip选项的话,还是尽量不要对库文件strip,只对链接后的可执行文件strip就可以了(如果也不调试)... 阅1 转自开心书屋-... 公众公开 17-02-09 15:28 |