본문 바로가기

CS/유닉스프로그래밍

(16)
7. 유닉스의 프로세스 - 2 프로세스의 종료 프로세스의 종료는 두가지가 있음 하나는 normal 하나는 abnormal 임 정상 종료는 메인 프로그램에서 return 해서 종료하는 경우, main 아니더라도 exit으로 종료하는 경우 (_exit은 exit이랑 조금 다름) 비정상 종료는 세가지가 있음 abort 시스템콜을 사용하는 경우(core dump해서 종료, 디버깅하는 데 사용), 시그널을 받아서 종료하는 경우, 그리고 스레드에 관련된 것(스레드는 생략) The exit(3) system call #include void exit(int status); void _Exit(int status); #include void _exit(int status); exit의 status는 종료되는 상태를 저장하는 변수임 시스템에서 자동으..
6. 유닉스의 프로세스 - 1 유닉스 프로그램은 실행파일을 만들면 유닉스 차원에서 부가되는 프로그램의 레이아웃이 있음 프로세스에 대해 설명하기 전에, 프로그램 실행 시 어떻게 main이 수행되는지 살펴보자 main 함수로 command line arguments 들과 환경변수들이 어떻게 넘어가고, 메모리 레이아웃이 어떻게 구성되는지 살펴보자 커널은 main함수를 호출하기 전에 특별한 start-up routine을 호출한다, 실행프로그램들은 이 start-up routine을 프로그램의 starting address로 명시한다 start-up routine은 커널로부터 command line arguments, environment 값들을 취한다. main Function 유닉스는 기본적으로 C언어를 이용함 int main(int a..
3-2. 유닉스 파일 엑세스, 파일 시스템, permission Users and Ownerships 유닉스는 멀티유저 시스템임 어떤 유저가 파일을 만들면 그 파일의 owner가 됨, 어떤 파일이 있으면 그 파일의 owner가 존재함 모든 유닉스 시스템의 모든 파일에는 그 파일을 소유하는 소유자가 있음, 시스템의 유저 중 한명 보통 user name으로 로그인하면 user id가 있는데, user id를 숫자로 표현한 user id가 있음 이를 보통 uid라고 함 uid는 /etc/passwd 에 등록됨 keith라는 이름의 user id는 35이고, group은 user에 속함 그룹도 gid가 있음 대개가 login id와 home directory id가 같음 시스템마다 directory home id는 default로 설정하는데 시스템마다 좀 다름 로그인하면 로..
3-1. 유닉스 파일 : redirection, 표준 IO 라이브러리, error handling input redirection $이 뜨고 명령어를 치면 default로 0이 잡혀있음 ( 0은 키보드, 1는 스크린 ) 키보드로 입력하면 0번 파일디스크립터로 입력하는 걸 볼 수 있음 n = read( 0, buffer, 100 )하면 키보드에서 한 바이트씩 읽어 들임 write(1, buffer, n) 하면 buffer에 있는 내용을 읽은 만큼 스크린에 출력해줌 키보드에서 데이터를 읽지 않고 infile에서 input을 받는 것을 redirection이라고 함 $ prog_name < infile 이 프로그램 실행 전에 shell에서 이걸 하면 input을 키보드에서 infile로 바꿔줌 dup2(infile, 0); /* infile ==3 */ infile의 내용을 0번이 가리키는 키보드에 dup..
2-2. 유닉스 파일 시스템콜 : open, creat, close, read, write, lseek , dup, fcntl open(2) 괄호 안에 (2)라고 있는 건 시스템콜을 의미함 1은 command, 2는 system call, 3은 library를 의미함 #include int open(const char *pathname, int flags, [mode_t mode]); Returns: file descriptor if OK, -1 on error open 시스템콜을 사용하기 위해서는 /usr/include/fcntl.h 헤더파일을 반드시 include 해야함 첫번째 인자로는 relative 또는 absolute pathname이 들어감 char*는 문자열임 세번째 인자는 옵션임 두번째 인자 flag는 read only, wrtie only, read write 이런 내용이 들어감 보통 바이너리 값으로 되어 있음 ..
2-1. 유닉스 파일, 파일시스템 유닉스는 파일에 대해서 파일의 기능을 심플하게 함 파일 파일은 데이터를 포함하는 컨테이너라고 정의함 파일은 연속된 바이트의 시퀀스라고 정의함 파일에는 어떤 포멧도 정해져있지 않음 (메인프레임의 경우 파일의 종류가 많았음 isam, random, vsam file, 등 파일의 종류에 따라 엑세스하는 API가 모두 다르고, 이를 OS가 다 정의해서 굉장히 무거웠음) 모든 바이트는 디스크 파일에서 바이트 하나하나 주소를 지정함, 다이렉트 랜덤 파일이 된다는 말임 파일에 관한 인터페이스를 다 uniform 하게 통일시킴 심지어는 외부의 디바이스 파일, 디스크 파일, 키보드, 유에스비, 마그네틱 테이프 등 모두 파일로 간주 모든 디바이스의 인터페이스를 다 통일함 파일 시스템 컴퓨터 파일과 데이터를 organzin..
1. 유닉스 기본 개념 유닉스 구조 1. 커널 하드웨어를 컨트롤하는 소프트웨어, OS의 핵 2. system calls 커널 기능을 사용하기 위한 외부 인터페이스 API 3. application 외부 애플리케이션이 쉘이나 라이브러리를 거침 라이브러리는 시스템콜을 통해 커널 기능을 사용 Logging in 유닉스는 multi user 로그인을 해야함 -> user id와 password를 치면 prompt(%)가 뜸 prompt는 shell이 작동한다는 것임 shell은 command interpreter로 명령을 받고 실행시킴 shell - 기본적으로 제공되는 shell은 AT&T가 만듦 - command interpreter - Bourn shell (/bin/sh) : $ - Korn shell (/bin/ksh) : $..
0. 유닉스 역사 유닉스 유닉스는 최초의 high level 커널이 과거에는 어셈블러로 써졌는데, 유닉스는 최초로 c로 작성 - 커널은 컴퓨터 하드웨어를 컨트롤 하는 소프트웨어. 쉘, 라이브러리, 유틸리티, 유저프로그램 등 모두 커널을 통해 하드웨어 실행 모든 파일이 루트 / 밑에 있음 하드웨어 디바이스 포함 모두 파일로 간주함 커널이 c로 작성돼서 하드웨어 이식성이 높음 대화형, 최초의 time sharing OS, multi processing 가능, 등의 특징을 가짐 1955 John McCarthy가 time sharing 개념을 최초로 고안 -> 구현 실패 CTSS를 만들고 1962년 MULTICS 만듦 1969-1971 MULTICS 프로젝트 하다가 실패 Ken Thompson이 게임 소프트웨어 space tr..