`
peng_wp
  • 浏览: 41856 次
社区版块
存档分类
最新评论
文章列表
   最近重装了系统,由于一直是双系统,重装系统后需要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 ...

some useful links

    博客分类:
  • misc
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不需要存 ...

os-进程线程概念

    博客分类:
  • OS
   操作系统中为了提供CPU的利用率,引入了多道编程,于是就有了进程的概念。    进程模型无疑提高了CPU的利用率,因为多个进程可以“同时”运行在一个CPU上,一个进程被阻塞掉了,另一个进程就可以被调度上CPU继续运行了。这样降低了CPU闲置的时间。    但是进程模型却存在一个问题。那就是如果一个进程被阻塞掉了,它就必须让出CPU了。同时对于一个任务,如果它是进程实现的(单进程),它实际上是“伪并发”的。因为一个进程内部不能并行运行。    于是就产生了线程模型,允许一个进程内部存在两个东西,同时运行任务,这样就真正意义上实现了并发。    有人会问,何必要出现线程模型,直接用多进程编程不 ...
Global site tag (gtag.js) - Google Analytics