Tonychow

在学,在前行,be a fool

Linux中fork系统调用分析

| Comments

1 相关概念及简单分析

在这一部分,我将会提及相关的概念比如进程,进程空间等,同时也对 fork 系统调用过程进行简单的文字描述。

1.1 进程

操作系统是在计算机硬件和应用程序或者用户程序之间的一个软件层,它通过对硬件资源的抽象,对应用程序隐藏了复杂的硬件资源,状态及操作,同时也隔离了应用程序和硬件资源,防止应用软件随意地操作硬件而带来的安全隐患。操作系统为应用程序提供了几种重要的抽象概念,进程就是操作系统中最基础的抽象概念之一。

通常情况下,我们认为进程是一个程序(program)的运行实例。当一个程序存放在储存介质上的时候,它只是一个指令,数据及其组织形式的描述。操作系统可以将一个程序加载到内存中以一个进程的形式运行起来,这就是这个程序的一个运行实例。所以我们也是可以多次加载一个程序到内存中,形成该程序的多个独立的运行实例。一个进程的内容不单只是程序的执行指令,还包括了诸如打开的文件,等待的信号,内部内核数据,处理器状态,内存地址空间及内存映射等等的资源。

第一次面试不完全流水账

| Comments

上周末投了某个公司的实习生,然后周二收到笔试邮件,周五交了笔试代码然后周六就来电话面试了。本来没想着这个时间了还会有公司收实习生,不过第一次面试还是很紧张。这次面试结果感觉很糟糕,有种心灰意冷的感觉。不过想着是第一次,还是记录一下好了。

Python函数的命名参数相关

| Comments

起因

今天师弟问了一个关于 Python 函数参数的一个问题:

1
2
3
4
5
6
7
8
#1
def func(x, l=[]):
    pass

#2
def func(x, l=None):
    if l is None:
        l = []

为啥第一个函数会把 l 每次调用完的值保留下来?

起初我认为问的是这两个函数使用的时候,为何会保持对传入的参数 l 的修改。从这个方面来讲,是因为 Python 对于数据赋值的处理的原因。

Python 中 Sqlite3 模块使用小记

| Comments

前记

Python 的标准库中包含了对 sqlite 这个轻巧的数据库的支持模块,也就是 sqlite3 模块。sqlite 数据库的好处我就不多说了,小型而强大,适合很多小型或者中型的数据库应用。最近在使用 sqlite3 模块遇到一些问题,解决了,顺便就记下来。

Python中的New-style和Old-style Classes

| Comments

使用 super() 的错误

super 函数是 Python 中的一个内置函数,提供对继承的类的函数调用,特别是在子类中被 overridden 的父类函数,比如

1
__init__()

最近在使用 super 函数的时候出现了个错误,例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> class Base:
...     def __init__(self):
...         self.num = 1
...
>>> class Next(Base):
...     def __init__(self):
...         super(Next, self).__init__()
...
>>> obj = Next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
TypeError: must be type, not classobj