호우동의 개발일지

Today :

article thumbnail
[OS] 쓰레딩 관련 문제(신호 처리,LWP,취소,TLS 등) 정리

Fork() 및 Exec() 시스템 콜 다중 스레드 프로그램에서는 fork()와 exec()의 의미가 달라질 수 있다. fork()에 대한 질문 - 한 프로그램의 스레드가 fork()를 호출했을 때 새로운 프로세스는 모든 스레드를 복제해야 하는가? 한 개의 스레드만 가지는 프로세스여야 하는가? 몇몇 UNIX 기종은 두 가지 버전의 fork()를 다 제공 두 버전 중 어느 쪽을 택할 것인지는 응용프로그램에 달려 있음 exec() 시스템 콜을 부를 때 exec()의 매개변수로 지정된 프로그램이 모든 스레드를 포함한 전체 프로세스를 대체 fork()를 부르자마자 다시 exec를 부르면 모든 스레드를 복제해서 만들어주는 것은 불필요 ← exec에서 지정한 프로그램이 곧 모든 것을 다시 대체할 것이기 때문 이 경..

article thumbnail
[OS] 암묵적 스레딩(implicit Threading) 개념 정리

암묵적 스레딩 암묵적 스레딩(implicit Threading) 스레딩의 생성과 관리 책임을 앱 개발자로부터 컴파일러와 실행시간 라이브러리에게 넘기는 것 앱 설계의 어려움을 극복하고 병행 및 병렬 앱 설계를 도와주는 방법 응용 프로그램 개발자가 병렬로 실행할 수 있는 스레드가 아닌 작업을 식별해야 함 작업은 일반적인 함수로 작성 런타임 라이브러리는 다대다 모델을 사용하여 별도의 스레드에 매핑 암묵적 스레딩 장점 개발자는 병렬 작업만 식별하면 된다. 라이브러리는 스레드 생성 및 관리에 대한 특정 세부사항을 결정 스레드 풀 다중 스레드 서버는 아직 여러 문제를 지님 스레드를 생성하는데 소요되는 시간 생성된 스레드가 단기 작업(곧 폐기될 스레드)이라면 더 문제가 됨 모든 요청마다 새 스레드를 만든다면, 동시 ..

article thumbnail
[OS] 다중 쓰레드 모델(Multi-Thread Model) 종류

다중 스레드 모델(MultiThreading Model) 수준 차이에 따른 스레드 지원 사용자 스레드(user threads) : 사용자 수준에서 지원하는 스레드 커널 위에서 지원되고 커널의 지원 없이 관리 커널 스레드(ker-nel threads) : 커널 수준에서 제공되는 스레드 커널 스레드는 운영체제에 의해 직접 지원되고 관리 거의 모든 현대 운영체제들은 커널 스레드를 지원 궁극적으로 사용자 스레드와 커널 스레드에는 어떤 연관 관계가 존재해야 함. 다대일 모델(Many-to-One Model) 많은 사용자 수준 스레드가 하나의 커널 스레드를 사상함 장점 스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해짐 → 효율적 단점 한 스레드가 봉쇄형 시스템 콜할 경우, 전체 프로세스가 봉쇄 한 번에 ..

article thumbnail
[OS] 스레드(Thread)의 기본 개념과 다중 코어 프로그래밍

스레드(Thread) 개요 스레드(Thread) : CPU 이용의 기본 단위 구성 → 스레드 ID + 프로그램 카운터(PC) + 레지스터 집합 + 스택 같은 프로세스에 속한 다른 스레드와 운영체제 자원들을 공유 운영체제 자원들 → 코드, 데이터 섹션, 열린 파일이나 신호 같은 것 2가지의 스레드 단일 스레드 프로세스 : 전통적인 프로세스로, 하나의 제어 스레드를 가지고 있다. 한 번에 하나의 작업만 수행할 수 있음 다중 스레드 프로세스 : 하나의 프로세스가 다수의 제어 스레드를 가지고 있음 동시에 하나 이상의 작업을 수행할 수 있다. 동기(Motivation) 현대의 거의 모든 소프트웨어 응용들은 다중 스레드를 이용한다. 하나의 응용은 몇 개의 실행 흐름을 가진 독립적인 프로세스로 구현된다. 예 워드에서..

article thumbnail
[OS] 파이프(Pipe)와 클라이언트 서버 환경에서의 통신

파이프 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로서 동작 초기 UNIX 시스템에서 제공하는 IPC 기법의 하나 파이프는 프로세스 간에 통신하는 간단한 방법이지만, 통신할 때 여러 제약이 발생 파이프 구현을 위해 고려해야 할 점 파이프가 단방향 또는 양방향 통신을 허용하는가? 양방향 통신이 허용된다면 → 반이중 방식인가, 전이중 방식인가? 반이중 방식 : 한 순간에 한 방향 전송만 가능 전이중 방식 : 동시에 양방향 데이터 전송 가능 통신하는 두 프로세스 간에 부모-자식과 같은 특정 관계가 존재해야 하는가? 파이프는 네트워크를 통해 통신이 가능한가, 아니면 동일 기계 안에 있는 두 프로세스끼리만 가능? 일반 파이프 일반 파이프는 생산자-소비자 형태로, 두 프로세스 간의 통신을 허용 생산자는 쓰기..

article thumbnail
[OS] 프로세스 간 통신 개념 및 기법 정리

프로세스 간 통신 운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적인 프로세스 일 수 있다. 독립적 : 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스 협력적 : 실행 중인 다른 프로세스들과 영향을 주고받는 프로세스 프로세스 협력을 허용하는 환경을 제공하는 이유 정보 공유 여러 응용 프로그램이 동일한 정보(복사, 붙여 넣기 등)를 원할수도 있음 → 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공해야 함 계산 가속화 특정 태스크를 빨리 실행하고자 함 → 태스크를 서브태스크로 나누어 이를 다른 서브태스크들과 병렬로 실행하면 됨 가속화는 복수 개의 처리 코어를 가진 경우에만 가능 모듈성 시스템 기능을 별도의 프로세스 또는 스레드로 나누어, 모듈식 형태로 시스템을 구성할 수도 있음..

article thumbnail
[OS] 프로세스 생성과 종료 개념 정리

프로세스에 대한 연산 대부분 시스템 내의 프로세스들은 병행 실행될 수 있으며, 동적으로 생성되고, 제거되어야 한다. → 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공해야 한다. 프로세스 생성 프로세스는 여러 개의 새로운 프로세스를 새로운 프로세스를 생성할 수 있다. 부모 프로세스 : 프로세스를 생성하는 프로세스 자식 프로세스 : 생성된 새로운 프로세스 자식 프로세스는 또다시 다른 프로세스를 생성할 수 있다. 부모와 자식 프로세스가 이어져 트리를 형성한다. 프로세스 식별자 프로세스 식별자(pid) : 프로세스를 구분하는 데 사용하는 식별자 해당 식별자는 보통 정수 UNIX, Linux 및 Windows와 같은 대부분의 현대 운영체제들이 사용 pid는 시스템의 각 프로세스에 고유한 값을 가지도록 할당..

article thumbnail
[OS] 프로세스 스케줄링 개념 정리

프로세스 스케줄링 다중 프로그래밍 목적 CPU 이용을 최대화하기 위해 항상 어떤 프로세스를 실행하는 것 시분할의 목적 프로세스들 사이에서 CPU 코어를 계속 교체하는 것 ← 각 프로그램이 실행되는 동안 사용자가 상호작용 할 수 있도록 하기 위해 시분할과 다중 프로그래밍의 목적을 달성하기 위해 프로세스 스케줄러가 존재 프로세스 스케줄러 : 코어에서 실행 가능한 프로세스 중 하나를 선택 각 CPU 코어는 한 번에 하나의 프로세스만 실행 가능 → 코어보다 많은 프로세스가 있는 경우, 초과 프로세스는 코어가 사용 가능해지고, 다시 스케줄 될 때까지 대기 현재 메모리에 있는 프로세스 수를 다중 프로그래밍 정도라고 함 프로세스는 대부분 2가지로 나눌 수 있음 I/O 바운드 프로세스 : 계산에 소비하는 것보다 I/O..