Operating System
-
개념 협력적 멀티 프로세스 및 멀티 스레드는 공유 데이터를 동시에 접근하면 그 결과가 접근 순서에 의존되어 데이터의 일관성을 망칠 수 있다. 따라서 이들의 질서있는 실행을 보장하여, 데이터의 일관성을 유지해야 한다. 멀티 프로세스와 멀티 스레드에 대한 자세한 내용은 아래의 링크 참고 [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com [UNIX] 멀티 스레드 (Multi Thread) 프로그래밍 개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 ..
[UNIX] 멀티 프로세스 및 스레드 공유 데이터 동기화개념 협력적 멀티 프로세스 및 멀티 스레드는 공유 데이터를 동시에 접근하면 그 결과가 접근 순서에 의존되어 데이터의 일관성을 망칠 수 있다. 따라서 이들의 질서있는 실행을 보장하여, 데이터의 일관성을 유지해야 한다. 멀티 프로세스와 멀티 스레드에 대한 자세한 내용은 아래의 링크 참고 [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com [UNIX] 멀티 스레드 (Multi Thread) 프로그래밍 개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 ..
2023.12.12 -
개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 하나의 스레드가 실행되지만, 여러 개의 스레드를 생성할 수 있으며, 이는 동시에 여러 개의 작업을 수행할 수 있다. 이를 멀티 스레드(다중 스레드)라고 한다. 같은 프로세스의 스레드들은 코드, 데이터, 파일, 힙 등의 메모리를 공유한다. 하지만 자신만의 고유한 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택을 가진다. 단일 컴퓨팅 칩에 여러 코어를 배치하는 다중 코어 시스템에서는 처리 능력을 향상시키도록 다수의 CPU 집중 작업을 병렬로 처리할 수 있다. 하지만, 단일 코어 시스템에서는 멀티 스레딩 프로그램을 동시성으로 작업할 수밖에 없다. 멀티 스레드의 활용의 예로 게임 로딩 창을 구현할 때, 데이터들을 로드하고 ..
[UNIX] 멀티 스레드 (Multi Thread) 프로그래밍개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 하나의 스레드가 실행되지만, 여러 개의 스레드를 생성할 수 있으며, 이는 동시에 여러 개의 작업을 수행할 수 있다. 이를 멀티 스레드(다중 스레드)라고 한다. 같은 프로세스의 스레드들은 코드, 데이터, 파일, 힙 등의 메모리를 공유한다. 하지만 자신만의 고유한 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택을 가진다. 단일 컴퓨팅 칩에 여러 코어를 배치하는 다중 코어 시스템에서는 처리 능력을 향상시키도록 다수의 CPU 집중 작업을 병렬로 처리할 수 있다. 하지만, 단일 코어 시스템에서는 멀티 스레딩 프로그램을 동시성으로 작업할 수밖에 없다. 멀티 스레드의 활용의 예로 게임 로딩 창을 구현할 때, 데이터들을 로드하고 ..
2023.12.06 -
개념 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로, UNIX 기반 운영체제에서 제공하는 프로세스 간 통신 (Inter-Process Communication, IPC) 기법 중 하나이다. 멀티 프로세스에 대한 자세한 설명은 아래의 링크 참고. [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com 사용법 #include int pipe(int pipefd[2]); pipe()의 인자로 파이프의 fd가 들어갈 크기 2개짜리 int 배열을 받는다. pipe()가 성공하면..
[UNIX] 파이프 (Pipe) 제대로 사용하기개념 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로, UNIX 기반 운영체제에서 제공하는 프로세스 간 통신 (Inter-Process Communication, IPC) 기법 중 하나이다. 멀티 프로세스에 대한 자세한 설명은 아래의 링크 참고. [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com 사용법 #include int pipe(int pipefd[2]); pipe()의 인자로 파이프의 fd가 들어갈 크기 2개짜리 int 배열을 받는다. pipe()가 성공하면..
2023.12.04 -
개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세스를 부모 프로세스라 부르고, 새로운 프로세스는 자식 프로세스라고 부른다. 새로운 프로세스들은 각각 다시 자식 프로세스들을 생성할 수 있으며, 이는 프로세스 트리를 형성한다. UNIX의 운영체제는 고유한 프로세스 식별자(PID)를 사용하여 프로세스를 구분한다. 자식 프로세스는 부모 프로세스와 동일한 프로그램을 가지며, 주소 공간(fd 테이블 포함)이 복사된다. 프로세스 생성 #include #include // pid_t pid_t fork(void); fork() 시스템 콜로 자식 프로세스를 생성한다. pid_t는 int..
[UNIX] 멀티 프로세스 (Multi Process) 프로그래밍개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세스를 부모 프로세스라 부르고, 새로운 프로세스는 자식 프로세스라고 부른다. 새로운 프로세스들은 각각 다시 자식 프로세스들을 생성할 수 있으며, 이는 프로세스 트리를 형성한다. UNIX의 운영체제는 고유한 프로세스 식별자(PID)를 사용하여 프로세스를 구분한다. 자식 프로세스는 부모 프로세스와 동일한 프로그램을 가지며, 주소 공간(fd 테이블 포함)이 복사된다. 프로세스 생성 #include #include // pid_t pid_t fork(void); fork() 시스템 콜로 자식 프로세스를 생성한다. pid_t는 int..
2023.12.04 -
유닉스 계열 운영체제에서 파일은 연속된 n개의 바이트다. 네트워크, 디스크, 터미널 같은 모든 I/O 디바이스들은 파일로 모델링되며, 모든 입력과 출력은 해당 파일을 읽거나 쓰는 형식으로 수행된다. 파일 열기 #include // mode_t type #include // mode masks #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 응용 프로세스는 해당 파일을 여는 것을 커널에 요청한다. 성공시 커널은 파일 디스크립터를 반환하고, 실패시 -1을 반환한다. 이후 응용 프로세스는 해당 파일 디스크립터(이하 fd) 를 이용해 해당 파일에 접근할 수 있다. 파일..
[UNIX] 입출력 및 리다이렉션 (I/O Redirection)유닉스 계열 운영체제에서 파일은 연속된 n개의 바이트다. 네트워크, 디스크, 터미널 같은 모든 I/O 디바이스들은 파일로 모델링되며, 모든 입력과 출력은 해당 파일을 읽거나 쓰는 형식으로 수행된다. 파일 열기 #include // mode_t type #include // mode masks #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 응용 프로세스는 해당 파일을 여는 것을 커널에 요청한다. 성공시 커널은 파일 디스크립터를 반환하고, 실패시 -1을 반환한다. 이후 응용 프로세스는 해당 파일 디스크립터(이하 fd) 를 이용해 해당 파일에 접근할 수 있다. 파일..
2023.11.20 -
I/O가 성능에 미치는 영향 I/O란 데이터 입출력을 일컫는 말이다. 네트워크 전송, 콘솔 출력, 파일 입출력 등을 모두 포함한다. 함수 실행과 같이 CPU를 사용하는 작업으로 인한 blocking은 개발자가 할 수 있는게 별로 없지만, I/O로 인한 blocking은 CPU를 긴 시간 idle하게 두기 때문에 다른 작업을 할 수 있음에도 오랫동안 할 수 없어 매우 비효율적이다. I/O에서 발생하는 시간은 CPU를 사용하는 시간과 대기 시간 중에 대기 시간에 속하기 때문에 I/O가 많아진다는 것은 CPU가 아무것도 하지 못하고 대기하는 시간이 길어진다는 의미고, 프로세스의 처리 속도가 같이 느려진다. Blocking I/O I/O 작업이 진행되는 동안 유저 프로세스가 자신의 작업을 중단한 채, I/O가 ..
[UNIX] I/O 멀티플렉싱 (Multiplexing) 및 selectI/O가 성능에 미치는 영향 I/O란 데이터 입출력을 일컫는 말이다. 네트워크 전송, 콘솔 출력, 파일 입출력 등을 모두 포함한다. 함수 실행과 같이 CPU를 사용하는 작업으로 인한 blocking은 개발자가 할 수 있는게 별로 없지만, I/O로 인한 blocking은 CPU를 긴 시간 idle하게 두기 때문에 다른 작업을 할 수 있음에도 오랫동안 할 수 없어 매우 비효율적이다. I/O에서 발생하는 시간은 CPU를 사용하는 시간과 대기 시간 중에 대기 시간에 속하기 때문에 I/O가 많아진다는 것은 CPU가 아무것도 하지 못하고 대기하는 시간이 길어진다는 의미고, 프로세스의 처리 속도가 같이 느려진다. Blocking I/O I/O 작업이 진행되는 동안 유저 프로세스가 자신의 작업을 중단한 채, I/O가 ..
2023.11.17 -
개념 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적 장치다. (네트워크 망의 연결에 사용되는 도구, 더 나아가서 네트워크를 통한 두 컴퓨터의 연결) 커널에 내부 버퍼를 가지고 있고, 꽉 차면 더이상 전송과 수신을 하지 않으므로 데이터 손실이 없다. 리눅스는 소켓 조작을 파일 조작과 동일하게 간주한다. 즉, 소켓을 파일의 일종으로 구분한다. 네트워크의 연결에는 TCP와 UDP가 나뉘지만, 해당 포스팅에서는 TCP를 다룬다. 함수 서버 측에서의 소켓과 클라이언트 측에서의 소켓은 사용법이 다르다. 서버 측 #include int socket(int domain, int type, int protocol); // 소켓 생성 int bind(int sockfd, struct soc..
[UNIX] TCP/IP 소켓 (Socket) 프로그래밍개념 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적 장치다. (네트워크 망의 연결에 사용되는 도구, 더 나아가서 네트워크를 통한 두 컴퓨터의 연결) 커널에 내부 버퍼를 가지고 있고, 꽉 차면 더이상 전송과 수신을 하지 않으므로 데이터 손실이 없다. 리눅스는 소켓 조작을 파일 조작과 동일하게 간주한다. 즉, 소켓을 파일의 일종으로 구분한다. 네트워크의 연결에는 TCP와 UDP가 나뉘지만, 해당 포스팅에서는 TCP를 다룬다. 함수 서버 측에서의 소켓과 클라이언트 측에서의 소켓은 사용법이 다르다. 서버 측 #include int socket(int domain, int type, int protocol); // 소켓 생성 int bind(int sockfd, struct soc..
2023.11.16 -
개념 유닉스 및 유닉스 계열 운영 체제에서 파일 또는 파이프나 네트워크 소켓과 같은 기타 입출력 리소스에 대한 프로세스 고유 식별자이자 핸들이다. 일반적으로 음수가 아닌 정수 값이며, 음수는 에러를 나타내기 위해 예약되어있다. 추가 설명 전통적인 유닉스 구현에서 파일 디스크립터 (이하 fd) 는 커널에 의해 유지되는 프로세스별 fd 테이블에 색인되고, 이 테이블은 다시 모든 프로세스에서 열린 파일 테이블에 색인되고, 파일이 열린 모드(읽기, 쓰기, 등)가 기록된다. 이 테이블은 또 파일의 데이터의 속성(변경 시간, 권한 등)과 파일 위치가 적혀있는 inode 테이블에 색인된다. 입력 또는 출력을 수행하기 위해 프로세스는 시스템 콜을 통해 fd를 커널에 전달하고 커널은 프로세스를 대신하여 파일에 액세스한다..
[UNIX] 파일 디스크립터 (File Descriptor)개념 유닉스 및 유닉스 계열 운영 체제에서 파일 또는 파이프나 네트워크 소켓과 같은 기타 입출력 리소스에 대한 프로세스 고유 식별자이자 핸들이다. 일반적으로 음수가 아닌 정수 값이며, 음수는 에러를 나타내기 위해 예약되어있다. 추가 설명 전통적인 유닉스 구현에서 파일 디스크립터 (이하 fd) 는 커널에 의해 유지되는 프로세스별 fd 테이블에 색인되고, 이 테이블은 다시 모든 프로세스에서 열린 파일 테이블에 색인되고, 파일이 열린 모드(읽기, 쓰기, 등)가 기록된다. 이 테이블은 또 파일의 데이터의 속성(변경 시간, 권한 등)과 파일 위치가 적혀있는 inode 테이블에 색인된다. 입력 또는 출력을 수행하기 위해 프로세스는 시스템 콜을 통해 fd를 커널에 전달하고 커널은 프로세스를 대신하여 파일에 액세스한다..
2023.11.15