Chap. 2. The Unix Model

Why Two Versions? 4.3 BSD and System V - A History of Unix

U.C. at Berkeley			3 BSD (Berkeley S/W Distrib.) -Demand paging for virtual memory	4.1 BSD -Supported by DARPA -정부가 이용하기 위한 표준 Unix		4.2 BSD -TCP/IP Net. S/W	4.3 BSD -판매용
Bell Lab. in AT&T	Version 1 -K. Tompson and D. Ritchie -Multics at MIT -PDP-7/PDP-11 의 OS (16-bit Mini Computer)	Version 3 -Written in C	Version 7 -VAX에 이식
USG(Unix Support Group) in AT&T					Sys. Ⅲ -종합판 -real-time 기능 추가	Sys. Ⅴ -판매용
	1969		1978	1979	1982	1983

∙ Unix source code (from 4.3 BSD and System V) + 각 회사의 추가 기능.

ex) Ultrix by DEC for VAX ⇒ Digital Unix로 발전.

Xenix by MS for Intel 8088

Solaris by SUN

HP-UX by HP

AIX by IBM

Linux (for Intel processors) by Linus Torvalds

A History of Unix Networking- TCP/IP

PSTN & Modem	uucp in V. 7 -File transfer -E-Mail cu in V. 7 -Remote login
Computer Networks		BBN(Bolt, Beranek & Newman) develops TCP/IP protocols for Berkeley Unix	4.2 BSD -Socket for Ethernet and ARPANet -Chap. 6	Sys. V R3.0 -TLI (Trans. Layer Interface) -Chap. 7
	1978	1980	1983	1986

∙ XTI(X/Open Transport Interface): a slight modification of the TLI (Stevens, 2nd ed.)

∙ Unix and TCP/IP:

- Internet의 기반 OS 및 protocol.

- 개방성 (source 및 규약이 공개되어 있음)

Unix 실습

∙ Remote login: Telnet tools - NetTerm or 새롬 데이터맨 프로 등

∙ 기본 command: ls, more, cat, man, cd, cp, mv, rm, mkdir, rmdir, ps, logout,

|, >, <

∙ Program command: vi(editor), cc(C compiler & linker), CC(C++ compiler & linker), javac(Java compiler), java(Java interpreter)

∙ Network command: mail, ftp, telnet, write, talk

∙ WWW: Apache server, IIS

⇒ 간결성, 성능 중시

⇒ Not User-Friendly Interface

강의내용

Objective: Learn the Concept of a "Process".

∘ Some fundamental definitions.

∘ Process I/O: Read data from a file & Write data to a file.

∘ Signal: A notification to a process that an "event" has occured.

∘ Process control: How to create & terminate a process. Communication bet. processes.

∘ Daemon(=Demon) process: A process that executes in the background EITHER waiting for some event to occur, OR to perform some specified task on a periodic basis.

ex) Printer daemon, Network daemon (inetd), Web server(httpd), DB server

Basic Definitions

▪ C language:

- B: K. Tompson in Bell Lab. (1970)

- C: Kernighan & Ritchie in Bell Lab. (1972)

▪ Standard C library in C

- A library of frequently used functions stored in /lib.

ex) sin(), log() in test.c

% cc test.c -lm -o test

linking math lib.

ex) in Visual C++

MFC (Microsoft Foundation Class): class "library"

ex) in Java

import java.io.*;

import java.net.*;

- Library function에서 쓰이는 header files (data format) in /include.

#include <stdio.h>: Standard I/O library.

#include <math.h>: Math library.

▪ Two sets of "functions"

ex) fopen(), printf(), fclose()

open(), read(), write()

① C library routine: C 컴파일러에 의해 제공되는 함수.

ex) malloc(), scanf(), ...

⇒ Any OS에서 사용.

② Unix system call: OS 커널에서 제공하는 service.

ex) fork(), exit(). ioctl(), pipe(), ...

⇒ Unix에서만 사용.

▪ Kernel : The OS itself.

User Program

system call

file system

buffer

char.  block

device drivers

Interprocess

communication

scheduler

memory

management

process

control

subsystem

libraries

socket

N/W

subsystem

buffer

device drivers

H/W control

H/W - CPU, momory, disk, N/W card, …

user

kernel

H/W

TCP/UDP

modules

▪ Program

- Executable file stored in directory.

ex)	commands - Stored in /etc/bin(ary)

⇔ c:\WINDOWS\system32 in Windows (*.exe)

compiled user programs - Stored in user directory.

▪ Process

- Instance of a program that is being executed by the kernel.

- Program → Process: exec()

Process → Process: fork()

Terminate a process: exit()

- Multitasking OS can execute more than one task (process) at a time by time-sharing.

ex) Unix, Windows, Linux 등.

- It is possible for a single program to be executing as many different processes at the same time.

ex) p.22, p.56

Shared: Text

⇒ By text table in kernel area

Not Shared: Data

/bin/vi

u1

u2

un

:

:

vi

vi

:

:

Process 1

Process n

ex) IE Web browser를 여러 개 실행시킬 경우.

▪ System calls

- Services from the kernel process.

⇒ user process가 kernel process에게 서비스를 요청.

⇒ System call 수행시 user process는 user mode에서 kernel mode로 바뀌어서 수행됨.

ex)   …	: user mode

fork()	: kernel mode ⇒ Kernel memory area access 가능.

…	: user mode

open()	: kernel mode

- Return -1 IF an error occurs

ELSE returns a value ≥ 0

ex) errno: a global integer which contains the system error no.

▪ Program ↔ Process: Shell

- ‘Command line interpreter’ that read commands from a user at a terminal or from a shell program file and execute the commands. (명령어 실행기)

ex) command.com in DOS.

- the Bourn shell : /bin/sh	; version 7

the Korn  shell : /bin/ksh

the C     shell : /bin/csh

the Bourn again shell (GNU bash): /bin/bash	; Linux

Ex) 자신의 shell 확인하기

$ cat /etc/passwd | grep test01

$ echo $SHELL

- login shell is defined in the password file.

ex) $ more /etc/passwd

▪ Passing Data: Kernel Process → User Process

ex) % more test.out : Shell process(%)로부터 User process가 생성

⇒ Pass 2 arguments (argv[0] - more, argv[1] - test.out)

to C startoff routine.

- Argument list: A variable length argument list passed to the process.

- 구조체: An array of pointers to char. strings.

ex) main(argc, argv)

int argc;       /* the number of arguments */

char *argv[];   /* the pointer of an array of pointers to char. string */

ex)

% echo hello world ↲

↗   ↑    ↖

argv[0]  argv[1]  argv[2]

argv

argv[0]

argv[1]

argv[2]

"echo\0"

"hello\0"

"world\0"

▪ Environment list

- A variable length list of environment variables :Process끼리 공유하는 값들.

ex) p.18

- Setting environment variables.

ex) In .cshrc	환경변수       환경변수값

setenv OPENWINHOME /usr/openwin

- A process can obtain the value of a specific variable from the list.

ex) p.18 3개 프로그램. (HW #1)

ex) 환경변수와 변수값 보기 (Unix/Linux)

$ env

ex) 환경변수와 변수값 보기 (Windows)

제어판 > 시스템 > 환경 변수 >

∙ DB Programming on the Web

- CGI (Common Gateway Interface)

DB

Browser

Server

CGI pgm.

① User CGI program들을 compile하여 cgi-bin directory에 저장.

② Browser가 특정한 CGI program을 실행할 것을 Web server에 요청.

ex) <FORM METHOD=get ACTION="http://www.kol.net/cgi-bin/test-cgi?NAME=Kim&ID=tykim">

“CGI process에 전달하는 입력값”

③ Web server는 HTML 문서에 내장된 특정 CGI program을 cgi-bin에서 찾아서 실행.

④ Web server의 “환경변수” 중의 하나인 QUERY STRING을 이용하여 user CGI program에 입력값을 전달.

⇒ FORM tag에 METHOD=GET이거나 생략한 경우.

(METHOD가 POST인 경우는 stdin(char. special file)을 통해서 전달됨.)

ex) Web Server Process의 환경변수 값들

SERVER_SOFTWARE = Apache/1/1/1

SERVER_NAME = www.kol.net

GATEWAY_INTERFACE = CGI/1.1

SERVER_PROTOCOL = HTTP/1.0

SERVER_PORT = 80

REQUEST_METHOD = GET

……

QUERY_STRING = NAME=Kim&ID=tykim

REMOTE_HOST = pc80.kol.co.kr

REMOTE_ADDR = 204.252.145.180

⑤ CGI program은 getenv()를 이용하여 변수 값을 전달 받음.

ex)  getenv(QUERY_STRING);

getenv(REMOTE_ADDR);

- CGI: User의 request마다 새로운 process를 생성

- Servlet

□모든 Servlet들은 하나의 Servlet engine process(예: Tomcat)에서 수행됨.

□User의 request마다 JVM상에서 thread를 생성하여 수행.

⇒ 같은 process 내에 있는 thread들은 서로 resource를 공유.

⇒ thread는 process보다 resource를 적게 사용.

⇒ performance enhancement

Browser

Client

Server

User

HTML files

Web Server

①request

③response

HTTP

Serv. Engine

DB

servlet

②execute

#80

#8080

Process in memory

▪ 수행되고 있는 단위작업.

- Kernel process   exec() a program   User process.

exit()

....

BUS

-- ----

I/O devices

CPU's

① process table

② user block

③ text table

④ file table

⑤ i_node

P0 - user context

P1

P2

:

file mgmt

process

mgmt

user area

kernel area

* degee of multiprogramming

increases → thrashing

memory

▪ User process in memory (p.20 Fig.2-2)

dynamic data

stack

heap

uninitialized data

initialized

read-write data

initialized

read-only data

text

Allocated by the kernel

static data

text

allocate more data space dynamically

ex) malloc()

the actual machine instructions

→ 공유가 가능한 부분 ex)p.56

user context

parameters

control link

local data

parameters

control link

local data

Main

function_1

ex) # ls ↲

Read from program file

when a pgm is executed

ex) p.21 program

int	debug = 1;	→ initialized read-write data

char	*progname;	→ uninitialized data

main(argc, argv)

int	argc;	→ stack: parameters

char	*argv[];	→  〃  : parameters

{

int	i;	→ i와 *ptr은 stack: local data

char	*ptr, *malloc(); → *malloc()는 heap.

progname = argv[0];                 //여기서부터

printf("argc = %d\n", argc);

for(i = 1; i < argc; i++) {

ptr = malloc(strlen(argv[i] + 1);	initialized read-only data

strcpy(ptr, argv[i]);

if (debug)

printf("%s\n", ptr);	//여기까지는 text.

▪ Kernel area in memory

data

text

user

block

text

data

user

block

process table

(PCB)

Kernel Area

User area

text table

P1

P2

P1

P3

P3

P2

user

block

data

“교체(swap in/out)

되는 부분”

“항상 memory에

상주하는 부분”

PID

UID

Process의 고유번호

Process를 만든 사용자

① Process table (PCB: Process Control Block): user process의 관리에 필요한 정보

․pid: 프로세스의 고유번호.

․ppid: parent 프로세스의 pid.  ex) 호적등본

․state: 프로세스의 현재상태.

․flag: 교체와 관련된 프로세스의 상태 및 기타 정보를 위한 flag.

․priority: 프로세스의 우선순위 값.

․time: 프로세스가 memory에 위치한 시간 - 스케쥴링에 이용.

․cpu: 프로세스가 CPU를 사용한 시간 - 스케쥴링에 이용.

․nice: 사용자가 정의한 nice 값.

→ 사용자 priority = pusher(100) + u_nice + penalty

․sig: 프로세스에게 들어온 signal의 상태.

․uid: 사용자의 고유번호(→ /etc/passwd). 즉, process의 주인.

․pgrp: 프로세스 그룹 리더.

․addr: 기억장치에서 교체(swap out)될 이미지(user context)의 시작주소.

․size: 기억장치에서 교체(swap out)될 이미지의 크기.

․wchan: 프로세스가 휴식(sleep)/대기(wait) 상태에서 기다리는 event.

․textp: text table을 가리키는 포인터.

․link: 실행대기 행렬(ready queue)을 linked list로 연결하는데 사용.

․clktim: alarm clock signal을 보내는데 사용. → alarm()

- 프로세스의 우선순위

휴식상태(sleep) ex) sleep()	-100: High 0	- sleep/wait 상태는 system call 상태이므로 kernel mode로 작동. → sleep()이나 I/O가 끝난 Process는 priority가 높음. - system call 발생시 user mode에서 kernel mode로 switching할 때 overhead가 발생. → system call의 횟수를 줄이면 수행시간이 감소.
대기상태(wait) ex) read()	1 99
사용자상태(ready)	100 127: Low	- 사용자 priority는 주기적으로 값이 다시 계산됨. - 사용자가 nice()를 이용하여 자의적으로 priority를 낮출 수 있음. - 자기에게 주어진 CPU quota 시간을 모두 쓰면 penalty가 높음.

② User block: 각 프로세스마다 할당됨. kernel이 필요한 정보.

․text, data, stack의 크기.

․virtual addr. space와 physical addr. space에 대한 mapping 정보.

․CPU register들의 값을 저장.  → 휴식/대기 상태로 전환시.

․system call시에 사용되는 정보.

․I/O시에 사용되는 정보. → file descriptor table, terminal ptr 등.

․user/group id

․수행시간

․root/current directory에 관한 정보.

․회계정보.

․kernel이 필요한 stack.

③ Text table: 프로세스들 간에 공유하는 text를 관리.

․daddr: 공유 text segment의 disk 주소.

․caddr: 공유 text segment의 memory 주소.

․size: 공유 text segment의 크기.

․iptr: 공유 text segment의 disk file 정보에 대한 ptr.

․count: 참조 횟수 (reference count).

․ccount: memory에서의 참조 횟수.

▪ Process ID (PID)

- An integer, typically in the range 0 through 30000.

- The kernel assigns the PID when a new process is created.

ex)  > ps -al ↲   /* 현재 process들에 대한 정보. (Windows: 작업관리자)

> ps -e ↲    /* root에서 daemon process 보기.

> kill -9 PID↲    /* terminate process by sending SIGKILL.

ex)	PID 0 : A special kernel process termed the process scheduler.

PID 1 : A special kernel process called init.

→ p.65 figure 2.9

PID 2 : A special kernel process termed the pagedaemon for virtual memory → demand paging and swapping.

ex) Task Manager in Windows Server (C:\WINDOWS\system32\taskmgr.exe)

▪ Parent process ID

- Each process has a parent process.

- int getppid()

ex) > ls

init

>

ls

fork()

fork() & wait(&status)

exit(status)

exec()

exec()

ex) /* getpid.c */

#include <stdio.h>

int main(void){	{

printf("my ID = %d, parent ID = %d\n", getpid(), getppid());

return 0;

}