일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- Mac
- spring
- Class
- 리눅스 마스터 1급
- Binary Search
- preprocessing
- dbms
- Java
- Entity Set
- selenium
- Polymolphism
- Physical Scheme
- 셀레니움
- python
- OOP
- Reference Type
- Inheritance
- 백준
- BFS
- literal
- Unity
- Operator
- 자바
- 리눅스
- X.org
- descriptive statistics
- systemd
- X윈도우
- Entity
- External Scheme
- Today
- Total
목록분류 전체보기 (180)
Byeol Lo
쓰레드 라이브러리는 프로그래머가 쓰레드를 생성하고 관리하기 위한 API를 제공한다. 쓰레드 라이브러리를 구현하는 두 가지 주요 방법이 있다. 첫 번째 방법은 커널 지원이 없는 사용자 공간에 완전한 라이브러리를 제공하는 것이다. 라이브러리의 모든 코드와 데이터 구조는 사용자 공간에 있고, 라이브러리의 함수를 호출하면 사용자 공간에서 지역 함수 호출이 되고 이는 시스템 호출이 아니다. 두 번째 방법은 운영 체제에서 직접 지원하는 커널 수준 라이브러리를 구현하는 것이다. 이 경우 라이브러리의 코드와 데이터 구조는 커널 공간에 있다. 라이브러리의 API에서 함수를 호출하면 일반적으로 커널로의 시스템 호출이 발생한다. 주로 사용되는 세 가지 주요 쓰레드 라이브러리는 POSIX의 Pthreads, Windows A..
지금까지 스레드를 일반적인 의미로 취급했지만, 스레드는 또한 두 가지 의미로 볼 수도 있다. 스레드 지원은 사용자 수준에서 제공될 수도 있으며(user threads), 또는 커널에서 제공될 수도 있다(kernel threads). User threads는 커널 위에서 지원되며 커널의 지원 없이 관리된다. 반면에 Kernel threads는 운영 체제에 의해 직접 지원 및 관리된다. 현대의 거의 모든 운영 체제(Windows, Linux, macOS) 는 커널 스레드를 지원한다. 최종적으로 사용자 스레드와 커널 스레드 사이에는 관계가 있어야 한다. 이 관계를 수립하는 세 가지 일반적인 모델을 살펴보자. 4.3.1 Many-to-One Model 다대일 모델은 여러 사용자 수준 스레드를 하나의 커널 스레드..
컴퓨터 설계의 초기에는 더 많은 컴퓨팅 성능이 필요하다는 요구에 따라 단일 CPU 시스템이 다중 CPU 시스템으로 진화했다. 이후에도 이러한 트렌드가 시스템 설계에서 발생했고, 여러 컴퓨팅 코어를 단일 처리 칩에 배치하여 각 코어가 운영 체제에서 별도의 CPU로 나타나게 하는 것이다. 이러한 시스템을 다중 코어(multicore) 시스템이라고 한다. 그리고 multi-threaded programming은 이러한 다중 컴퓨팅 코어를 더 효율적으로 활용하고, 개선된 concurrency를 제공하는 메커니즘을 제공한다. 다중 코어 시스템에서는 concurrency의 보장으로 시스템이 각 코어에 별도의 스레드를 할당할 수 있기 때문에 스레드가 병렬로 실행될 수 있다. 위 아래의 그림 차이를 통해 멀티 스레드가..
프로세스는 하나의 실행 프로그램과 하나의 제어 스레드를 가진 것으로 가정했다. 하지만 현재는 대부분 프로세스 하나에 여러 개의 제어 스레드를 포함할 수 있는 기능을 제공한다. 스레드를 사용하여 병렬성의 기회를 식별하는 것은 여러 CPU를제공하는 현대의 다중 코어 시스템에서 점점 더 중요해지고 있다. 여기서는 Pthreads, Windows 및 Java 스레드 라이브러리의 API에 대한 개념과 도전 과제를 비롯한 여러 가지 개념을 보고, 개발자가 병렬성의 기회를 식별하는 데 집중하고 언어 기능 및 API 프레임워크가 스레드 생성 및 관리의 세부 사항을 처리하도록 하는 스레드 생성 개념을 추상화하는 여러 가지 새로운 기능을 볼 수 있다. 스레드는 CPU 활용의 기본 단위이며, 스레드 ID, 프로그램 카운터 ..
이 섹션에서는 네 가지 다른 IPC 시스템을 탐색한다. 먼저 메모리를 위한 POSIX API를 보자. 3.7.1 POSIX Shared Memory POSIX 시스템에서는 공유 메모리와 메시지 전달을 포함하여 여러 IPC 메커니즘이 제공된다. 여기서는 공유 메모리에 대한 POSIX API를 탐색한다. POSIX 공유 메모리는 메모리 매핑된 파일을 사용하여 구성된다. 이는 공유 메모리 영역을 파일과 연관시킨다. 프로세스는 먼저 shm_open() 시스템 호출을 사용하여 공유 메모리 개체를 생성해야 한다. fd = shm_open(name, O_CREAT | O_RDWR, 0666); 첫 매개변수는 공유 메모리 개체의 이름, 공유 메모리에 액세스하려는 프로세스는 이 이름으로 개체를 참조해야 한다. 그 다음 ..
이 전의 방식들은 프로세스들이 메모리 영역을 공유하고, 공유 메모리에 액세스하고 조작하는 코드를 응용 프로그램 프로그래머가 명시적으로 작성해야 한다는 것을 요구한다 하지만 동일한 효과를 달성하기 위한 또 다른 방법이 있었다. 바로 Message-Passing 이다. 이는 프로세스들이 동일한 주소 공간을 공유하지 않고도 통신하고 작업을 동기화하는 메커니즘을 제공한다. 통신하는 프로세스들이 네트워크로 연결된 다른 컴퓨터에 거주할 수 있는 분산 환경에서 특히 유용하다(프로세스간의 통신이 가능하기 때문). 메시지 전달 기능은 최소 두 가지 작업이 필요한데, send(message), receive(message) 이다. 프로세스가 보낸 메시지는 고정된 크기이거나 가변적일 수 있다. 고정된 크기의 메시지만 전송할..
공유 메모리를 사용한 IPC(Inter-Process Communication)은 통신하는 프로세스가 공유 메모리 영역을 설정해야 한다. 일반적으로 공유 메모리 영역은 공유 메모리 세그먼트를 생성한 프로세스의 주소 공간에 존재한다. 이 공유 메모리 세그먼트를 사용하여 통신하려는 다른 프로세스는 해당 세그먼트를 자신의 주소 공간에 첨부해야 한다. 보통 운영 체제는 한 프로세스가 다른 프로세스의 메모리에 액세스하는 것을 막는데, 공유 메모리는 두 개 이상의 프로세스가 이 제한을 해제하기로 합의해야 한다. 그런 다음에 공유 영역에서 데이터를 읽고 쓰는 방식으로 정보를 교환할 수 있다. 데이터의 형식과 위치는 프로세스에 의해 결정되며 운영 체제의 제어 아레에 있지 않게 된다. 또한 프로세스는 동시에 동일한 위치..
운영체제에서 동시에 실행되는 프로세스는 독립 프로세스 또는 협력 프로세스가 될 수 있다. 프로세스가 independent 경우에는 시스템 내에서 다른 프로세스와 데이터를 공유하지 않는다. 프로세스가 cooperating 경우에는 시스템 내에서 다른 프로세스에 영향을 주거나 받을 수 있다. 명백히 다른 프로세스와 데이터를 공유하는 프로세스는 협력 프로세스이다. 이러한 협력을 허용하는 환경을 제공하는 이유는 여러가지가 있는데, Information Sharing: 여러 응용 프로그램이 동일한 정보에 관심을 가질 수 있기 때문에, 이러한 정보에 대한 동시 액세스를 허용하는 환경을 제공해야 함 Computation Speedup: 특정 작업을 더 빠르게 실행하려면 해당 작업을 하위 작업으로 나누어야 한다. 각 ..
대부분 시스템에서 프로세스들은 동시에 실행될 수 있으며, 동적으로 생성 및 삭제가 될 수 있다. 따라서 이러한 시스템의 프로세스 생성, 종료를 위한 메커니즘을 제공해야 한다. 프로세스 생성에 관련된 메커니즘을 보자. 3.3.1 Process Creation 실행 과정 중에 프로세스는 여러 개의 새로운 프로세스를 생성할 수 있다. 생성되는 프로세스는 '부모 프로세스', 부모 프로세스에서 syscall로 생성되는 프로세스를 '자식 프로세스'라고 한다. 이러한 프로세스들은 프로세스 트리(tree)를 형성하게 된다. 대부분의 운영체제에서 프로세스는 일반적으로 정수 숫자인 고유한 프로세스 식별자(pid, process identifie)를 가지며, pid는 시스템 내의 각 프로세스에 대한 primary key가 ..
다중 프로그래밍의 목적은 CPU 활용률을 극대화하기 위해 언제나 어떤 프로세스가 실행 중이어야 한다는 것이다. 반면에 time sharing으 목적은 CPU 코어를 프로세스 간에 자주 전환하여 사용자가 각 프로그램이 실행되는 동안 사용자가 동시에 여러 작업을 수행하는 것처럼 보이게 하여, 각 프로그램이 실행되는 동안 입력을 제공하고 출력을 확인할 수 있도록 하는 것이다. 이 두 목표를 달성하기 위해서 process scheduler 는 각 프로그램이 실행을 위해 사용 가능한 프로세스를 선택한다. 각 CPU 코어는 한 번에 하나의 프로세스만 실행할 수 있다. 단일 CPU 코어 시스템의 경우 한 번에 하나의 프로세스만 실행되므로, 여러 코어 시스템은 한 번에 여러 프로세스를 실행할 수 있다. 단일 CPU 코..