Computer Science/시스템 프로그래밍 12

[시스템 프로그래밍] Chapter 14

POSIX semaphore를 이용하려면 mutex와 마찬가지로 객체를 초기화하거나 생성하는 작업이 필요하다. Critical section을 4가지로 나눠보자 Entry section : 임계영역에 들어가기 전에 OS에게 임계영역에 들어가도 되냐고 허가를 묻는 섹션(뮤텍스를 사용한다면 뮤텍스를 초기화하고 lock을 요청하는 코드가 될 것이다), 허가를 받으면 들어올 수 있고 그렇지 못하면 대기한다. critical section : 공유 리소스를 동시에 접근해서 충돌이 발생하지 않도록 하는 구역, 이코드는 nonreentrant(코드를 실행하고 난 다음에 다른 프로세스가 이 코드에 진입을 해서는 안되는 것)하다exit section : 임계영역에서 코드를 다 실행한 다음에 exit section으로 진..

[시스템 프로그래밍] Chapter 13

Mutex : 상호 배제라는 뜻으로 mutual exclusion의 약자이다. 스레드하나가 임계영역에 들어오면 다른 스레드들은 들어오지 못하도록 배제하는 것mutex 변수를 이용해서 여러 공유 데이터들을 동시에 액세스 하는 문제점을 보호할 수 있다. mutex변수가 Lock과 같은 개념으로 작동할 수 있다.  즉, Mutex라는것의 기본 개념은 오직 하나의 스레드만 mutex변수(lock)를 소유할 수 있다. 그래서 여러 스레드들이 동시에 액세스 한다면 가장 먼저 요청한 스레드에게만 lock을 주고 다른 스레드들은 대기한다. 그래서 lock을 다시 용하면 lock을 해제해야 한다. 그래야 다음 스레드들이 액세스 할 수 있기 때문이다. 스레드들은 반드시 임계영역에 의해서 보호된 데이터를 액세스 하는 순서를..

[시스템 프로그래밍] Chapter 12

concurrent 한 task를 하기 위한 방법(monitoring file descriprtors)1. 프로세스를 여러개만들자.2. select, poll함수를 사용하자.(blocking함수) 다중스레드를 사용하지 않고 싱글스레드 기반에서 이 두 함수를 써서 서버를 구축할 수 있음. 그러나 함수하나가 실행중일 때 다른 작업을 하지 못한다는 제한적인 부분이 있음3. nonblocking I/O with polling으로 모니터링을 할 수 있다. 얼마나 자주 모니터링을 해야 하는지 타이머에 관한 부분을 모니터링해야 한다는 단점이 있다.4. POSIX asynchronous I/O를 사용하자. 백그라운드로 요청한 사실을 수동으로 확인하려면 timing문제가 있고 시그널로 확인하려면 시그널핸들러를 사용해야 ..

[시스템 프로그래밍] Chapter 9

POSIX TimesEpoch : 컴퓨터 시스템의 시간이 시작된 점 (1970년 1월 1일 00시부터 정의) tm구조체는 gm이나 locailtime함수의 리턴타입으로 현재시간에대한 요소값을 할당해서 반환해 주는 타입이다.위의 함수는 구식이라 다른함수를 쓴다Timer : 우리가 알고있는 타이머와 동일(계속 값이 감소하는 것)Clock : 계속값이 증가하는것 Timer drift : 타이머의 완료시점이 딜레이가 생겨서 실제보다 뒤에 타이머가 완료되는 문제 생기는 이유 : 타이머가 만료가 됐다가 다시 시작을 하는 지점에서 딜레이가 발생하기 때문이다. 또한 타이머의 세밀도가 10ms라고 가정하자 그럼 타이머는 10, 20, 30 씩 증가한다. 그런데 타이머의 간격을 22라고 설정을 한다면 이 타이머는 22를 ..

[시스템 프로그래밍] Chapter 8

기본적인 signal개념시그널이란 이벤트가 발생했을 때 타깃프로세스에게 알려주기 위한 수단으로 사용되는 software notification이다.시그널의 liftime은 해당이벤트가 발생했을때 생성되고 발생된 시그널은 타깃프로세스에게 전달되고 프로세스가 시그널을 전달받으면 delivered 됐다고 말한다. 프로세스가 시그널을 받으면 수신한 시그널에 대한 처리를 하도록 되어있음. 그 처리를 마치고 난 뒤에 삭제된다. 그러나 항상 타깃프로세스에게 시그널이 전달되는 것이 아니고 막힐 수 있음(이러한 시그널을 pending signal) pending signal은 바로 삭제되는 것이 아니라 pending signal list에 들어가서 대기하게 된다. 프로세스는 도착한 시그널을 캐치해서 수신한 시그널에 대한..

[시스템 프로그래밍] Chapter 6

Pipe(이름 없는 파이프)파이프라는 것은 같은 컴퓨터 안에서 돌고 있는 프로세스들 사이에 데이터를 주고받기 위해서 간단하게 사용할 수 있는 IPC 메커니즘이다.Pipe의 특징 파이프는 이름이 없다. ls를 해도 아무것도 안 뜸 (네임프 파이프는 ls를 하면 파일이 있다.)파이프는 일시적인 객체이다(temporary). 파이프를 사용하는 프로세스가 모두 종료를 하게 되면 사용했던 파이프 객체도 자동으로 소멸이 된다. (네임드 파이프는 프로세스가 모두 종료가 되더라도 삭제가 되는 것이 아니라 계속 남아있음) 파이프의 파일 디스크립터를 사용하는 프로세스가 없다면 파이프는 자동으로 삭제된다.)두 개의 파일 디스크립터를 알고 있어야만 파이프를 access할 수 있다.(아무 프로세스나 파이프를 사용할수있는것은 아..

[시스템 프로그래밍] Chapter 5

Files and DirectoriesOS는 파일시스템 안에서 물리적인 디스크를 관리한다.File system : 파일과 attribute의 집합체로 파일을 효율적으로 관리하기 위해서 파일의 위치나 이름을 관리함. 실제 하드디스크상의 위치는 모르더라도 파일이름과 offset으로 파일의 위치를 찾는다Directory : 다른 파일이나 서브디렉터리들을 포함할 수 있는 기능을 가지고 있는 것. 아이노드 번호와 파일명을 하나의 디렉터리 엔트리라고 하고 이정보를 가지고 있는 것을 디렉터리라고 한다. 대부분의 디렉터리는 트리구조이다.(계층구조)Root directory : ' / '라고 표현함. 절대경로(루트부터 시작되는 경로)를 의미함. Parent directory : " .. " 현재 작업 중 인디렉토리를 기..

[시스템 프로그래밍] Chapter 4

Device Terminology 1peripheral device : 컴퓨터의 주변장치(입출력 장치) ex. disk, tapes, CD-ROMs, 키보드 등 Device driver : OS의 모듈 중에 하나, 하드웨어를 access 하기 위한 여러 가지 방법들을 모아서 숨겨놓는 역할을 하는 부분, 디바이스 드라이버는 다바이스 오퍼레이션에 세부적인 부분들을 숨기고 인터페이스만 제공해 준다.Device Terminology 2open, close, read, write 이 4개의 함수만 있으면 IO device의 종류에 상관없이 데이터를 쓰고 읽을 수 있음디스크 파일이나 다른 입출력장치들이 일반 file을 access 하듯이 동일한 함수를 이용해서 access 할 수 있음UNIX files유닉스에서의 ..

[시스템 프로그래밍] Chapter 3

프로세스란 실행 중인 프로그램이 기 때문에 active entity , 프로그램이란 static(passive) entitytime sharing : 실행할 프로세스를 빠르게 스위칭하면서 ready que안에 들어있는 프로세스들이 사용자 눈에는 동시에 실행이 되는 거처럼 보이도록 하는 것 context switch : 실행중인 프로세스를 스위칭하는 것, 현재 상태 정보를 저장을 함. 다음에 스위칭할 지점을 기억해 야하기 때문  process identificationreal user : 프로세스를 실행하는 유저effective user : 프로세스가 어떤 유저의 권한으로 실행이되는것이냐 라고 나타내는 것 fork() 함수 현재프로세스에 자식프로세스를 생성하는 역할(즉, 프로세스를 하나 만드는 역할, 부모..

[시스템 프로그래밍] Chapter 2

프로그램이란  static 한 객체로 사용자들이 프로그램이 실행이 될 때 그 instruction squence를 나열한 것 이 프로그램을 실행하면 프로세스가 된다. Program counter : 다음에 실행할 instruction의 주소가 저장되어있음스레드 실행 예시ex) 프로세스 안에 245, 246, 247이 있다고 가정결과 - 245, 246, 247ex) 두 개의 프로세스이고 프로세스 1은  245, 246, 247이 다른 하나는 10, 11, 12, 13이 있다고 가정만약 OS가 1번 프로세스를  먼저 실행하고 프로세스 1이 5개의 instruction을 하고 스위칭을 하고 프로세스 2는 4개의 instruction을 하고 스위칭한다고 가정하자. context switch(실행할 프로세스가 ..