
Fork() 및 Exec() 시스템 콜 다중 스레드 프로그램에서는 fork()와 exec()의 의미가 달라질 수 있다. fork()에 대한 질문 - 한 프로그램의 스레드가 fork()를 호출했을 때 새로운 프로세스는 모든 스레드를 복제해야 하는가? 한 개의 스레드만 가지는 프로세스여야 하는가? 몇몇 UNIX 기종은 두 가지 버전의 fork()를 다 제공 두 버전 중 어느 쪽을 택할 것인지는 응용프로그램에 달려 있음 exec() 시스템 콜을 부를 때 exec()의 매개변수로 지정된 프로그램이 모든 스레드를 포함한 전체 프로세스를 대체 fork()를 부르자마자 다시 exec를 부르면 모든 스레드를 복제해서 만들어주는 것은 불필요 ← exec에서 지정한 프로그램이 곧 모든 것을 다시 대체할 것이기 때문 이 경..
암묵적 스레딩 암묵적 스레딩(implicit Threading) 스레딩의 생성과 관리 책임을 앱 개발자로부터 컴파일러와 실행시간 라이브러리에게 넘기는 것 앱 설계의 어려움을 극복하고 병행 및 병렬 앱 설계를 도와주는 방법 응용 프로그램 개발자가 병렬로 실행할 수 있는 스레드가 아닌 작업을 식별해야 함 작업은 일반적인 함수로 작성 런타임 라이브러리는 다대다 모델을 사용하여 별도의 스레드에 매핑 암묵적 스레딩 장점 개발자는 병렬 작업만 식별하면 된다. 라이브러리는 스레드 생성 및 관리에 대한 특정 세부사항을 결정 스레드 풀 다중 스레드 서버는 아직 여러 문제를 지님 스레드를 생성하는데 소요되는 시간 생성된 스레드가 단기 작업(곧 폐기될 스레드)이라면 더 문제가 됨 모든 요청마다 새 스레드를 만든다면, 동시 ..

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

스레드(Thread) 개요 스레드(Thread) : CPU 이용의 기본 단위 구성 → 스레드 ID + 프로그램 카운터(PC) + 레지스터 집합 + 스택 같은 프로세스에 속한 다른 스레드와 운영체제 자원들을 공유 운영체제 자원들 → 코드, 데이터 섹션, 열린 파일이나 신호 같은 것 2가지의 스레드 단일 스레드 프로세스 : 전통적인 프로세스로, 하나의 제어 스레드를 가지고 있다. 한 번에 하나의 작업만 수행할 수 있음 다중 스레드 프로세스 : 하나의 프로세스가 다수의 제어 스레드를 가지고 있음 동시에 하나 이상의 작업을 수행할 수 있다. 동기(Motivation) 현대의 거의 모든 소프트웨어 응용들은 다중 스레드를 이용한다. 하나의 응용은 몇 개의 실행 흐름을 가진 독립적인 프로세스로 구현된다. 예 워드에서..
파이프 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로서 동작 초기 UNIX 시스템에서 제공하는 IPC 기법의 하나 파이프는 프로세스 간에 통신하는 간단한 방법이지만, 통신할 때 여러 제약이 발생 파이프 구현을 위해 고려해야 할 점 파이프가 단방향 또는 양방향 통신을 허용하는가? 양방향 통신이 허용된다면 → 반이중 방식인가, 전이중 방식인가? 반이중 방식 : 한 순간에 한 방향 전송만 가능 전이중 방식 : 동시에 양방향 데이터 전송 가능 통신하는 두 프로세스 간에 부모-자식과 같은 특정 관계가 존재해야 하는가? 파이프는 네트워크를 통해 통신이 가능한가, 아니면 동일 기계 안에 있는 두 프로세스끼리만 가능? 일반 파이프 일반 파이프는 생산자-소비자 형태로, 두 프로세스 간의 통신을 허용 생산자는 쓰기..

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

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