일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- python
- External Scheme
- Reference Type
- Unity
- 셀레니움
- Inheritance
- selenium
- 백준
- dbms
- Mac
- Entity
- preprocessing
- spring
- Binary Search
- OOP
- Polymolphism
- literal
- X.org
- 리눅스
- Physical Scheme
- descriptive statistics
- 자바
- BFS
- Class
- Operator
- Entity Set
- Java
- X윈도우
- systemd
- 리눅스 마스터 1급
- Today
- Total
목록OS (72)
Byeol Lo
이제 프로세스에 대한 스레드 경쟁을 알아보았으니 스레드를 연결시켜주어야 한다. 스레드에서는 user thread와 kernel thread로 나뉘는 것을 알 것이다. 대부분의 운영체제에서는 프로세스가 아닌 kernel thread가 운영체제에 의해 scheduling이 된다. user thread는 대부분 스레드 라이브러리에 의해 관리되며, 커널은 이를 인식하지 못한다. CPU에서 실행되기 위해서 user thread 는 궁극적으로 관련 kernel thread에 매핑이 되어야 하지만, 이 매핑은 간접적일 수 있고, 경량 프로세스(LWP)를 사용하여 관리할 수도 있을 것이다. 여기서는 thread가 어떻게 스케줄링 되는지에 자세히 초점을 맞춘다. 5.4.1 Contention Scope user thre..
프로세스를 스케줄링 하는 방법 살펴보자. 이전에 봤던 criteria 스케줄링이 다르며, 이 섹션에서는 단일 처리 코어만을 사용 가능한 상황일 때를 가정하고 설명한다. 밑에서 설명하는 대부분의 알고리즘은 다음 사이트에서 전부 시뮬레이션이 가능하다. Process Scheduling SolverDynamically generates gantt chart and calculates TAT (turnaround time) and WAT (waiting time) based on various CPU scheduling algorithms.process-scheduling-solver.boonsuen.com 5.3.1 First-Come, First-Served Scheduling 편의점에서도 선입선출이라는 ..
이제 다양한 scheduling 알고리즘을 살펴보기 전에 이 알고리즘이 어떤 평가 방식, 기준으로 performance를 측정하는지 알아야 할 것이다. 그래야 CPU의 활용을 어떻게 극대화를 하는지 알 수 있고, 특정 상황에서는 이 특성들에 따라 다른 알고리즘을 써서 더 좋은 효율을 낼 수도 있을 것이다. 그 기준들을 보자. CPU Utillization CPU를 가능한 한 가용하게 유지하고자 하는 평가 방식이다. 이론적으로 CPU 활용률은 0%에서 100%까지 이고 실제 시스템에서는 40%부터 90% 사이여야 한다.(Linux, macOS, UNIX에서 top 명령을 사용하여 CPU utillization을 확인할 수 있다.) Throughput 이는 CPU가 프로세스를 실행하는 동안 작업이 수행하여 ..
CPU 스케줄링은 다중 프로그램 운영 체제에서 기초이다. 프로세스 간에 CPU를 전환하기 때문에 운영 체제는 컴퓨터의 생산성을 높일 수 있다. 이전 장에서는 프로세스 모델에 스레드를 적용시켰는데, 현대 운영 체제에서는 실제로 운영체제가 커널 수준의 스레드를 스케줄링 한다. 하지만 프로세스 스케줄링 과 스레드 스케줄링이라는 용어는 종종 교차하여 사용된다. 여기서는 일반적인 스케줄링 개념을 논의할 때 프로세스 스케줄링을 사용하고, 스레드에 특화된 개념을 언급할 때는 스레드 스케줄링을 사용한다. 1장에서 core가 CPU의 기본 계산 단위임을 말했었는데, CPU에서 프로세스를 실행한다 라는 일반적인 용어를 더 많이 사용하며, 이것이 CPU 의코어에서 실행 중이라는 것을 의미한다. Basic Concept 단일..
유저 스레드와 커널 스레드 간의 연결을 위해 사이에서 관리를 해주어야 한다. 이전에 살펴본 스레드의 구성요소를 살펴보자.thread IDregister setprogram counterUser stack(사용자 모드에서 실행 중일 때 사용되는 사용자 스택)Kernel stack(커널 모드에서 실행 중일 때 사용되는 커널 스택)Private storage area(다양한 런타임 라이브러리, 동적 링크 라이브러리 에서 사용되는 영역) 4.7.1 Windows Threads Windows의 응용 프로그램은 별도의 프로세스로 실행된다. 각 프로세스는 하나 이상의 스레드를 포함하며, 스레드를 생성하는 Windows API는 one-to-one mapping을 사용한다. 이는 각 사용자 수준 스레드가 관련된 커널 ..
멀티 스레드 프로그램을 디자인할 때 고려해야 할 몇 가지 문제에 대해 논의해보자. 4.6.1 The fork(), exec() System Calls fork는 별도의 중복 프로세스를 생성하는 것으로 알고 있겠지만, 멀티스레드 프로그램에서는 fork(), exec() 의 의미가 변경된다. 프로그램의 한 스레드가 fork()를 호출하면 새로운 프로세스는 모든 스레드를 복제할지 fork() 시스템 콜을 호출한 스레드만을 복제할지 의문이 들 것이다. UNIX는 fork가 두가지 버전인데, 하나는 모든 스레드 복제, 다른 하나는 fork 시스템 콜을 호출한 스레드만을 복제한다. exec은 원래와 마찬가지로 호출하면, 모든 스레드와 전체 프로세스를 대체하여 지정된 프로그램이 실행되게 된다. 4.6.2 Signal..
다중 코어 처리의 발전 덕분에 수백, 수천 개를 사용할 수도 있다. 하지만 이렇게 쓰레드가 많아지면 그만큼 자원 관리를 설계하는게 쉬운일이 아니다. 병행 및 병렬 응용 프로그램의 설계를 지원하고, 해결하는 방법은 스레딩의 생성과 관리를 개발자에서 컴파일러 및 런타임 라이브러리로 이전하는 것이다. 이를 implicit threading이라고 한다. 여기서는 암시적 스레딩을 통해 다중 코어 프로세서의 이점을 활용할 수 있는 응용 프로그램을 설계하기 위해 4가지 접근법을 볼 것이며, 이런 전략들은 일반적으로 다대다 모델(Many-to-Many) 을 사용하게 된다. 4.5.1 Thread Pools 전에 멀티 스레딩 웹 서버에 대해서 봤는데, 서버가 요청을 받을 때마다 요청을 처리하기 위한 별도의 스레드를 생성..
쓰레드 라이브러리는 프로그래머가 쓰레드를 생성하고 관리하기 위한 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의 보장으로 시스템이 각 코어에 별도의 스레드를 할당할 수 있기 때문에 스레드가 병렬로 실행될 수 있다. 위 아래의 그림 차이를 통해 멀티 스레드가..