操作系统学习--系统调用

系统调用

有关进程管理的系统调用 (UNIX)

Pid = fork() 创建一个与父进程相同的子进程;Pid = waipid(pid,&statioc,options) 等待子进程结束;S = execve(name,argv,environp) 更换进程映像;exit(status) 进程结束,返回状态

fork的示例

main(){
    int i, pid;
    for(i = 1;i <= 3;i++){
        if((pid = fork()) == 0){
            printf("In child %d. \n",i);
        }
    }
}

在这个示例中,虽然看起来循环了3次,但是对于fork进程而言,第一次循环共有2个进程,第二次共有4个进程,第三次共有了8个进程,如下图:

image

进程在内存中的地址空间

image

进程有三种类型的段:正文,数据,堆栈

有关文件管理的系统调用

Fd = open(file,how,...) 打开一个文件

S -= close(fd) 关闭一个文件

n = read(fd,buffer,nbytes) 从文件中读取数据

n = write(fd,buffer,nbytes) 写数据到文件中

Position = lseek(fd,offset,whence) 改变文件的读写指针

S = stat(name,&buf) 取文件的状态

有关目录管理的系统调用

S = mkdir(name,mode) 创建一个新目录

S = rmdir(name) 删除一个空目录

S = link(name1,name2) 创建一个目录项name2,指向name1

S = unlink(name) 删除一个目录项

S = mount(special,name,flag) 安装一个文件系统

S = umount(special) 拆卸一个文件系统

目录管理的示例

假设有以下目录:

"/usr/jim/memo""/usr/ast"

其中/memo/jim中的ID是70,现有以下代码:

link("/usr/jim/memo","/usr/ast/note");

其作用就是在"/usr/ast"中创建一个目录/note,其ID与/memo的ID相同,为70. 这就是连接/usr/jim/memo/ast的目录前。

mount

对于下列代码:

mount("dev/fd0","/mnt",0)

其作用就是在/mnt下安装dev/fd0这个目录。

(事实上,fd0 很可能是个设备,比如磁盘,软盘等)

其他系统调用

S = chdir(dirname)改变当前目录;

S = chmod(name,mode) 改变文件权限;

S = kill(pid,signal) 给一个进程发送信号;

Seconds = time(&seconds) 取1970年1月1日以来的秒数。

UNIX与Windows系统调用对比

UNIX WIN 描述
fork CreateProcess 创建一个新进程
waitpid WaitForSingleObject 等待一个进程结束
exit ExitProcess 结束执行
open CreeateFile 创建/打开文件
close CloseHandle 关闭文件
read ReadFile 从文件中读取数据
write WriteFile 往文件中写数据
...... ...... ......

基本所有的UNIX系统调用在Windows系统都有对应版本。

posted @ 2023-03-20 14:53  Little-Red  阅读(53)  评论(0)    收藏  举报