當前系統呼叫都採用的是posix標準,posix標準以其簡潔易用在類unix作業系統中流行,以至於linux從一開始就遵從posix標準。
本節介紹應用程式和作業系統之間的介面系統呼叫。採用的是 posix ,這個介面被 minix3, unix, linux 等許多現代作業系統所遵循。系統呼叫以 c 語言的形式出現。
系統呼叫和普通過程呼叫的區別:系統呼叫時在核心狀態執行, cpu 存在乙個切換。普通過程呼叫不存在切換。
以讀檔案操作為例: count = read(fd, buffer, nbytes);
minix 系統主要的系統呼叫列表:
程序管理:
pid = fork();
pid = waitpid(pid, &statloc, opts);
s = wait(&status);
s = execve(name, argv, envp);
exit(status);
size = brk(addr);
pid = getpid();
pid = getpgrp();
pid = setsid();
訊號 (singnals)
l = ptrace(req, pid, addr, data);
s = sigaction(sig, &act, &oldact);
s = sigreturn(&context);
s = sigprocmask(how, &set, &old);
s = sigpending(set);
s = sigsuspend(sigmask);
s = kill(pid, sig);
residual = alarm(seconds);
s = pause();
檔案管理:
fd = create(name, mode)
fd = mknod(name, mode, addr)
fd = open(file, how, ...)
s = close(fd);
n = read(fd, buffer, nbytes)
n = write(fd, buffer,nbytes)
pos = lseek(fd, offset, whence)
s = stat(name, &buf)
s = fstat(fd, &buf)
fd = dup(fd)
s = pipe(&fd[0])
s = ioctl(fd, request, argp)
s = access(name, amode)
s = rename(old, new)
s = fcntl(fd, cmd, ...)
目錄和檔案系統管理
s = mkdir(name, mode)
s = rmdir(name)
s = link(name1, name2)
s = unlink(name)
s = mount(special, name, flag)
s = umount(special)
s = sync()
s = chdir(dirname)
s = chroot(dirname)
保護許可權相關
s = chmod(name, mode)
uid = getuid()
gid = getgid()
s = setuid(uid)
s = setgid(gid)
s = chown(name, owner, group)
oldmask = umask(complmode)
時間管理
seconds = time(&seconds)
s = stime(tp)
s = utime(file, timep)
s = times(buffer)
作業系統 作業系統的設計與實現
系統設計的首要問題是定義目標和規範。從高層來說,系統設計取決於所選硬體和系統型別 批處理 分時 單使用者 多使用者 分布式 實時或通用。除了最高設計層外,需求可能很難說清,但需求可以分為兩類 使用者目標和系統目標。使用者要求系統具有一定的優良效能 系統應該易於學習和使用 可靠 安全和快速。研發人員為...
作業系統設計與實現
額,沒有看完,但是 目前看得還是沒有壓力就是 好奇心和問題都太多,丟下一段 對於如下一條命令 cp file1 file2 其功能是為檔案file1作乙個拷貝file2,在shell建立乙個子程序後,子程序執行程式cp,同時向該程式傳遞執行的引數 源檔名和目標檔名。cp程式的主函式格式如下 main...
作業系統設計與實現 讀書筆記6 系統呼叫
當前系統呼叫都採用的是posix標準,posix標準以其簡潔易用在類unix作業系統中流行,以至於linux從一開始就遵從posix標準。本節介紹應用程式和作業系統之間的介面系統呼叫。採用的是 posix 這個介面被 minix3,unix,linux 等許多現代作業系統所遵循。系統呼叫以 c語言的...