Keep Learning

伪程序员记录点滴

现代操作系统:进程(笔记)

进程

进程模型

一个进程就是一个正在执行的程序实例,包括程序计数器、寄存器和变量的当前值。一个进程就是某种类型的一个活动,它有程序、输入、输出以及状态。

Linux内核设计与实现笔记

Linux内核等待队列

wait_queue_head_t
init_waitqueue_head()
DECLARE_WAIT_QUEUE_HEAD
等待队列就是一个进程链表,其中包含了所有等待某个特定事件的进程。
静态初始化一个等待队列头使用下面的宏

DECLARE_WAIT_QUEUE_HEAD(name)

动态初始化一个等待队列

1
2
wait_queue_head_t name;
init_waitqueue_head(&name)

add_wait_queue()
用来将一个进程添加到等待队列,该函数在获得必要的自旋锁后,使用__add_wait_queue()函数来完成队列添加工作

C语言笔记

1
__attribute__((packed))

取消编译器的默认优化,按照字节的方式进行对齐

1
memset(void *ptr, int value, size_t num)

注意第二个和第三个参数的顺序,首先是设置的值然后才是设置的位数

Learning Python the Hard Way笔记

python函数

1
raw_input([prompt])

在终端上显示prompt的提示符,在界面上输入东西之后,将输入的东西以string的形式返回到对应的变量中

1
open()

打开文件,括号中的文件应该使用引号来表达,使用字符串,不能单单的使用名字。open返回的是文件描述符,对文件描述符的操作可以使用pydoc2 file来查看对应的操作。

Linux内核活动

中断

中断类型

同步中断和异常
异步中断:一般由硬件产生
硬件IRQ,中断控制器

Vim_tips摘抄

:w
:wq
:q
:q!
ZZ
:10,20w filename
:x

光标移动

h : Move left

i : Move right

j : Move down

k : Move up

  • : act as j in command mode

  • : act as k in command mode

w : Move to next word

W : Move to next blank delimited word

b : Move to the beginning of the word

B : Move to the beginning of blank delimiter word

e : Move to the end of the word

E : Move to the end of Blank delimited word

ge : jump to previous word-ending

gE : jump to previous word-ending, ignore punctuation(忽略标点符号)

Learing Bash笔记

第一章

cd - :返回到之前的文件夹。用于工作路径的跳转。
\ ’ “引用键,可以取消特殊字符的含义,各个功能有强弱,其中’为强取消.”为若取消,\仅仅取消一个字符的含义。使用上面这三个可以在命令过长时取消回车的含义,一般终端会提示>作为提示符号。
ctrl+m在终端中相当于回车
ctrl+d DELETE
ctrl+j BACKSPACE
stty –all查看当前终端的所有ctrl配置。
在shell中,使用help中的通配符时,需要使用''将对应的通配符引用起来,如help ‘re*’; help ‘re??’等。

AWK语言学习

awk

awk以花括号分隔命令,命令以’{}’围起来?

其中printprint $0的作用相同,都是打印整整一行。print $1 $2则是打印改行的第1个和第2个内容。

-F用来标志分隔符是什么,如下面

Linux进程学习

Linux进程调度与管理

Linux进程状态

Linux进程描述符使用的结构体为task_struct,结构体的定义位于include/linux/sched.h文件中。该结构体很复杂,包含了一个进程应该包含的所有信息。

进程可以处于的状态包括:

TASK_RUNNING:进程当前正在运行或者处于待运行的队列中;

TASK_INTERRUPTIBLE:进程处于休眠队列中,可以被中断唤醒或者被信号唤醒。其中被信号唤醒为伪唤醒,每次进程被唤醒时需要对唤醒的条件进行判断,若不符合条件则继续休眠。

TASK_UNINTERRUPTIBLE:进程同样位于休眠队列中,但是只能够被中断所唤醒,忽略信号。这种情况可以用于在驱动程序中,等待硬件初始化中使用,防止对硬件进行其他操作。

TASK_STOPPED:进程被终止,如被调试器缩终止。

TASK_TRACED:进程被追踪了,用来和TASK_STOPPED所区分。

EXIT_ZOMBIE:子进程终止,但是父进程没有调用wait()系列函数,子进程无法正常退出,处于这种状态。

EXIT_DEAD:在适当的wait()调用之后当程序还没有完全从系统中移除时,防止其他线程再次调用wait()系列函数时处的状态。

Linux下支付宝插件的安装

在linux下使用支付宝时需要安装插件才可以登录,当没有插件时,会提示安装插件。从网址下载的脚本文件安装之后仍然提示需要安装插件,从google搜索发现,支付宝的插件还需要libpng12的支持。我的Linux版本为arch,在arch的aur包里面有一个aliedit的插件,安装上这个插件后可以正常的使用。支付宝的Linux支持真是不好,也不提示说需要使用libpng的插件。