- 浏览: 42099 次
最新评论
文章列表
最近重装了系统,由于一直是双系统,重装系统后需要linux的grub去引导windows。
现在的linux用grub2做为bootloader,grub通过命令update-grub方便地换核,但是去引导windows我却不知道要执行什么命令,不过我相信应该有命令可以直接实现用grub2去引导windows。
于是就直接改了 grub.cfg 这个只读文件,这篇博文也只是记录一下我在 grub.cfg 中加了什么。红色内容我添加的内容。
引用
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub ...
这个blog内容大部分为转载。
[小企鹅输入法]
Fcitx [ˈfaɪtɪks] is a input method framework with extension support. Currently it supports linux and Unix system, like freebsd. It has three builtin Input Method Engine, Pinyin, QuWei and Table-based input methods.
[获得fctix]
最新版下载地址:http://code.google.com/p/fcitx/ ...
这是一篇转载的分析。源地址是:http://www.cnblogs.com/aka-blog/articles/filemax.html。
最近一个群里同志问了个问题,运行一个网络服务程序是提示打开的文件太多,是个多进程的程序,当时想到的是链接太多用尽了进程的文件描 ...
前面实验室的师兄们在讨论pthread这套接口能不能实现进程间同步,自己对这个不是十分地了解,但是对这个比较感兴趣,于是就在实验室师兄的指导下去实现了这个同步机制。
测试的结果就是可以用pthread_mutex_t来实现进程间的同步。
需要注意的是初始化 mutex 时需要指定 PTHREAD_PROCESS_SHARED 这个属性,代码如下
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mu ...
以这篇博文来纪念自己与“Linux kernel多核启动”相处的两个多月。
本文章以2.6.33.1的linux内核在x86_64平台上为例进行说明。
本文参考了http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/smpboot.html
Linux kernel启动的过程概览
init/main.c:start_kernel()
|
\|/
init/main.c:rest_init
{
……
kernel_thread(kernel_init, NULL, CLONES_FS | CLONE_SIGHAND)
……
cpu_idl ...
我阅读的代码是2.6.33.1的代码。
本文没有详细分析代码逻辑,主要是看函数执行流程。
启动过程从arch/x86/boot/header.S开始。按代码所在位置分为两部分,一部分是在boot目录下的,另一部分是在kernel目录下。
1. arch/x86/boot/header.S(Based on bootsect.S and setup.S)
是在16-bit的实模式执行,因此访存是这样的:段地址:段内偏移
在header.S有一个jmp main的命令,跳转到arch/x86/boot/main.c。
在这个main函数中,初始化许多设定,例如init_heap(),set ...
最近在看代码的时候碰到一个问题,这项目中有一个全局变量,里面有许多系统用的属性。但是一直找不到它在哪里被赋值。后来跟了代码才发现在系统开始之前已经有一个constructor将这个东西初始化好。
GCC可以给函数若干属性,其中construction就是其中一个。具体有哪些属性,可以看GCC的文档。http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
在上面文档中有对于constructor与destructor的描述:
引用
constructor
destructor
constructor (priority ...
经常在define语句中看到用do{} while(0)将一个程序片段包起来,一直感觉很奇怪,经查找,才发现这是在define语句使用中的一个tricky的情况。
define表达使用do{} while(0)的两个例子:
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
LIST_NEXT((li ...
The Joel Test: 12 Steps to Better Code
http://www.joelonsoftware.com/articles/fog0000000043.html
homempage 刘末鹏
http://mindhacks.cn/
wireshark是一款非常不错的抓包工具。
但是如果使用wireshark抓包却不配置filter的话,估计找到我们需要的包,会花费半天时间。
不过还好wireshark自带了很好的帮助文档,有它们几乎可以解决所有的问题。
如果要使用wireshark抓包,强烈建议看一下http://wiki.wireshark.org/CaptureFilters
下面是其中部分内容,已经可见其价值了。
引用
Examples
Capture only traffic to or from IP address 172.18.5.4:
host 172.18.5.4
Cap ...
前面发现自己对cache的概念模糊了,又拿起《计算机组成与设计:软硬件接口》这本经典之作温习了一下。
cache的存在是为了解决CPU处理速度比memory范围速度快得多的问题。如果没有CPU与memory速度上的差异,cache不需要存 ...
操作系统中为了提供CPU的利用率,引入了多道编程,于是就有了进程的概念。
进程模型无疑提高了CPU的利用率,因为多个进程可以“同时”运行在一个CPU上,一个进程被阻塞掉了,另一个进程就可以被调度上CPU继续运行了。这样降低了CPU闲置的时间。
但是进程模型却存在一个问题。那就是如果一个进程被阻塞掉了,它就必须让出CPU了。同时对于一个任务,如果它是进程实现的(单进程),它实际上是“伪并发”的。因为一个进程内部不能并行运行。
于是就产生了线程模型,允许一个进程内部存在两个东西,同时运行任务,这样就真正意义上实现了并发。
有人会问,何必要出现线程模型,直接用多进程编程不 ...