Hi there!

I am a student studying computer science.

728x90

분류 전체보기 127

시스템 프로그래밍 7장 - Thread : Condition variable

Condition variables 필요한 경우 mutex는 thread간 동기화를 제공한다. - 어떤 thread가 mutex lock을 얻은 이후에 어떤 조건을 만족시킬 때까지 기다리는 경우가 있다. - mutex를 얻은 이후에 condition을 위해 block된 상태가 길어지면 다른 thread들이 block을 얻을 수 없는 상태가 된다. - block된 상태가 해결이 안되면 다른 thread들도 block된다. - 따라서 모든 thread가 block되어서 교착상태가 될 수 있다. 그 block이 해제될 때까지 mutex lock을 release해주어야 좋다. 자신의 block을 풀고 어떻게 다시 lock을 가져오게 만들 것인가. /* condition variable creation & des..

시스템 프로그래밍 6장 - Thread : Synchronization

Thread Synchronization 공유 계좌에 두 명의 사용자가 동시에 다른 곳에서 출금을 하려고 한다면 ? int withdraq(account, amount) { balance = get_balance(account); balance = balance - amount; put_blance(account, balance); return balance; } 출금중인 계좌의 잔고가 update되기전에 출금을 시도하면 계좌는 먼저 출금시도한 사람의 금액이 고려되지 않고 오류가 발생한다. Mutex thread에서 동기화를 제공해주는 주요 수단 - lock처럼 동작을 하는 변수 - 공유되는 data에 lock을 걸어서 data를 독점한다. concept - 다수의 thread가 존재할 경우 한번에 하나..

시스템 프로그래밍 6장 - Thread : Cancellation

Thread cancellation - thread가 완료 되지 않았을 때 cancel하는 system call - pthread_cancel(pthread_t tid) cancellation types asynchronous cancellation 어떤 thread를 종료하기 위해 호출하면 즉시 종료된다. 만약에 대상 thread가 현재 cancel요청이 왔을 때 resource는 바로 반환을 한다. deferred cancellation 현재 자신의 일을 수행완료한 다음에 종료한다. 그 thread는 특정 point에서 종료된다. pthread_testcancel()를 호출하여 cancel point를 만들어서 check한다. pthread_cleanup_push()를 호출하여 cancel point..

시스템 프로그래밍 6장 : Thread

프로세스를 생성하는 것은 굉장히 system overhead가 드는 작업이다. - process는 독립적으로 동작하는 큰 단위이다. process에 포함된 것들 - address space ( code, data, stack, heap, ...) - OS resource(open file descriptor, account, env, ...) - process에 현재 실행하는 hardware 상태( PC, SP, registers, ...) - process간 data통신을 하기 위해서는 OS의 resource를 거쳐서 작업한다. *process를 생성해서 실행해도 변하지 않고 사용할 수 있는 resource들이 있다. - code, data - privilege상태 - OS의 resource들 (fil..

시스템 프로그래밍 5장 - Process Control : Daemon

Daemon이란? terminal과 연결관계가 없는 background process - booting을 할때 root로 부터 시작되거나, 특별한 user group에서 실행된다. - crond, sshd, // d로 끝난다. Daemon 요구조건 1. init이라는 자식 process로 실행되어야한다. 2. 현재 terminal과 연결되지 않아야한다. Daemon 만들기 - 일반 user가 만들어내는 process들은 일반적으로 shell을 이용하기 때문에 shell의 자식 process다 그리고 모든 shell은 init이라는 곳에서 생성되는 최초의 program 이므로 일반적인 processs는 모두 init의 자식이다. 그러므로 1조건을 충적한다. - 2조건 만족하기 위해 아래를 뜨른다 1. fo..

시스템 프로그래밍 5장 - Process Control : Process Start & Exit

exec system call Pass command line arguments and environment variables to the C startup routine Run the program. C start-up routine Passing command-line arguments and environment variables while calling the main function - Program source code를 작성한 이후 gcc로 실행 파일을 만들어낸다. - command라인에서 실행파일을 실행한다. - kernel에서 해당 실행파일의 이름을 exec를 호출해서 실행한다. - 이후의 typing이 있을 경우 argument로 해당 실행 program에 전달한다. - exec가 사용..

시스템 프로그래밍 5장 - Process Control : PID

프로세스 관련 정보세팅 및 관리 제어하는 방법 apip Process ID #include #include pid_t getpid(void); // return PID of caller process pid_t getpgrp(void); // return Process GID of caller 각 process의 id를 얻어오는 system call return PID of caller process 각 process의 group id를 얻어오는 system call return Process GID of caller Session - Process group들의 모임 - group은 작업 / Sesseion은 작업 공간 z.B) Terminal에서 shell이 실행이되고 shell에서 process가 ..

시스템 프로그래밍 4장 - Current Process : Multitask - Pipe

Linux system의 Multitask 여러 개의 Process를 Memory에 올려놓고 Time slicing과 Scheduling해서 1 time에 하나 씩 실행시킨다. - 특정 시간동안 한 process를 실행하고 다른 process를 idle상태로 만든다. - 특정 시간 마다 타이머 주기를 맞추고 Context switching 한다. - swithching할때 CPU는 CPU에 점유하는 Process Control Block을 바꿔주는 작업을 한다. - 실행중인 Process를 scheduler의 stack 영역에 저장한다. & idle상태 process의 control block 복구해서 CPU의 register에 적재하고 실행한다. - 이런 작업을 반복한다. Problem 여러 개의 pr..

시스템 프로그래밍 4장 - Concurrent Process

Process관련된 system call interface Concurrent Process란? - 동시에 실행되는 여러 개의 process라는 뜻이다. 이렇게 여러 개의 process가 하나의 목적을 가지고 일을 나누어서 실행되는 Program이 많이 있다. cocurrent process가 가능하도록 여러 api 즉 system call 이라든지 progrming interface를 제공해주는 방식으로 - 일반적으로 IPC(Inter Process Comunication)가 있다. //process간의 통신기법 - cocurrent process 도구로는 cocurrent language인 Ada, Java, PathPascal, Modula II 들이 있고 이 언어들은 interface를 제공하고 ..

시스템 프로그래밍 3장 - System call : File I/O Permission, ID

파일 권한 속성 접근권한을 수정 or 확인하기 위해서 process id가 필요하다. #include #include uid_t getuid(void) // process creator’s uid user id를 가져올 수 있는 syscall return user id / -1 #include #include uid_t getgid(void) // process creator’s uid group id를 가져올 수 있는 syscall return group id / -1 uid_t geteuid(void); effective user id를 가져올 수 있는 syscall kernel의 protection system에 대한 key값이다. 일반적으로 uid가 euid 같지만 dynamic protectio..

728x90