목록학교에서 들은거 정리/시스템프로그래밍 (13)
mojo's Blog
※ Shared Variables in Threaded C Program Question : Threaded C 프로그램에서 공유되는 변수는 무엇인가? "global variables are shared" 및 "stack variables are private" 처럼 간단한 질문이 아니다. Define : 변수 x는 여러 스레드가 x의 일부 인스턴스를 참조하는 경우에만 공유된다. 다음 질문에 대한 답변이 필요하다. 스레드의 메모리 모델은 무엇인가? 변수의 인스턴스는 어떻게 메모리에 매핑되는가? 이러한 각 인스턴스를 참조할 수 있는 스레드는 몇 개인가? ※ Threads Memory Model Conceptual model : 단일 프로세스의 컨텍스트 내에서 여러 스레드가 실행됨 각 스레드에는 고유한 개별..
※ Concurrent Programming is Hard! 동시 프로그램의 고전적인 문제 클래스: Races : 결과는 시스템 내에 다른 곳의 arbitrary scheduling 결정에 따라 달라진다. 예: 비행기의 마지막 자리는 누가 차지할까? Deadlock : 잘못된 자원 할당으로 인해 앞으로 진행되지 않게 된다. 예: 교통 체증 Livelock / Starvation / Fariness : 외부 event, 시스템 scheduling 결정으로 하위 작업 진행이 방해될 수 있다. 예: 사람들은 항상 내 앞에 줄서서 뛰어오른다. ※ Iterative Servers Iterative Servers 는 한 번에 하나의 요청을 처리한다. 만약 Client 1, 2, 3 가 존재하고 Iterative s..
※ Sockets Interface : socket 클라이언트와 서버는 socket 함수를 사용하여 socket descriptor 를 생성합니다. int socket(int domain, int type, int protocol) Example : int clientfd = Socket(AF_INET, SOCK_STREAM, 0); AF_INET : 32비트 IPV4 주소를 사용 중임을 나타낸다. SOCK_STREAM : 소켓이 연결의 끝점이 됨을 나타낸다. 프로토콜에 따라 다르다. 가장 좋은 방법은 getaddrinfo 를 사용하여 parameter 를 자동으로 생성하여 코드가 프로토콜에 의존하지 않도록 하는 것이다. ※ Sockets Interface : bind 서버는 bind 를 사용하여 커널에..
※ A Client-Server Transaction 대부분의 네트워크 애플리케이션은 클라이언트-서버 모델을 기반으로 한다. 서버 프로세스 및 하나 이상의 클라이언트 프로세스들 서버가 일부 리소스를 관리한다. 서버는 클라이언트의 리소스를 조작하여 서비스를 제공한다. 클라이언트의 요구에 의해 서버가 활성화된다 (vending machine analogy) 주목할 점은 클라이언트와 서버 둘 다 host 에서 작동되는 점인데 호스트 둘 다 동일할 수 있거나 다를 수 있다는 점을 알아두도록 하자. network host 란? 네트워크 호스트(network host)는 컴퓨터 네트워크에 연결된 컴퓨터나 기타 장치이다. 네트워크 호스트는 정보 리소스, 서비스, 애플리케이션을 네트워크 상의 사용자나 기타 노드에 제공..
Unix I/O ※ Unix I/O Overview Linux 파일은 m 바이트의 sequence 이다. B0, B1, ..., Bk, ..., Bm-1 Cool fact : 모든 I/O 디바이스는 파일로 표시된다. /dev/sda2 (/usr disk partition) /dev/tty2 (terminal) 커널도 파일로 표시된다. /boot/vmlinuz-3.13.0-55-generic (kernel image) /proc (kernel data structures) file 은 chunk 들의 단위이다. 이때 chunk 는 block 으로 "512 byte" 로 구성되어 있으며 read, write 에 대한 unit 이다. 디바이스에 파일을 mapping 하여 Unix I/O 라 불리는 간단한 인터..
※ Linux Process Hierarchy pstree 명령어를 치면 hierarchy 를 볼 수 있다고 한다. 명령어를 치면 다음과 같다. ※ Shell Programs Shell 은 사용자를 대신하여 프로그램을 실행하는 application program 이다. sh : Original Unix shell csh/tcsh : BSD Unix C shell bash : "Bourne-Again" Shell (기본 리눅스 쉘) shell 이 실행되도록 하는 코드는 다음과 같다. void eval(char *cmdline) { char *argv[MAXARGS]; /* Argument list execve() */ char buf[MAXLINE]; /* Holds modified command line..