스레드(Thread)
- 스레드는 프로세스 내에서의 작업 단위이면서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다.
- 하나의 프로세스에 하나의 스레드 = 단일 스레드 , 하나의 프로세스에 하나 이상의 스레드가 존재하는 경우 = 다중 스레드
- 프로세스의 일부 특성을 갖고 있기 때문에 경량 프로세스라고도 함.
- 운영체제의 성능을 개선하려는 소프트웨어적 접근 방법이다.
스레드의 분류
사용자 수준의 스레드 : 사용자가 만든 라이브러리를 사용하여 스레드를 운용함
ㄴ 단점 : 속도는 빠르지만 구현이 어려움
커널 수준의 스레드 : 운영체제의 커널에 의해 스레드를 운용함
ㄴ 단점 : 구현이 쉽지만 속도가 느림
프로세스 : 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 프로그램을 말하며 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.
스레드 : 프로세스안에서 실질적으로 작업을 실행하는 단위.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. < 요거 중요
스레드와 프로세스의 차이점
프로세스는 완벽히 독립적이기 때문에 메모리 영역을 다른 프로세스와 공유를 하지 않지만,
스레드는 해당 스레드를 위한 스택을 생성할 뿐 프로세스내의 코드,데이터, 힙영역의 메모리를 공유한다..
=> 스레드의 구성은 프로그램 카운터, 레지스터 셋, 스택을 보유하고 있다.
=> 스레드를 사용하면 하나의 프로세스 내에서 여러 작업을 동시에 병렬 처리 할 수 있기 때문에 프로그램의 응답성을 향상 시키고 작업이 빠르게 처리 되며
프로세스보다 문맥 교환 비용이 적게 들며 프로세스보다 더 적은 자원을 사용하기에 경량적이다.
1. 스레드는 프로세스와 동일하게 하나의 실행 흐름이므로 실행과 관련된 데이터가 필요하다.
2. 스레드는 자신만의 고유한 스레드 ID, 프로그램 카운터 , 레지스터 집합, 스택을 가진다.
3. 코드, 데이터, 파일 등 기타 자원은 프로세스 내의 다른 스레드와 공유한다.
§ 스레드 병렬 수행
§ 프로세스 하나에 포함된 스레드들은 공동의 목적 달성을 위해 병렬 수행
§ 프로세스가 하나인 서로 다른 프로세서에서 프로그램의 다른 부분 동시 실행
§ 스레드 병렬 수행의 이점
§ 사용자 응답성 증가
§ 프로세스의 자원과 메모리 공유 가능
§ 경제성 좋음
§ 다중 처리(멀티 프로세싱)로 성능과 효율 향상
• 단일 스레드
ㄴ 하나의 프로세스에서 하나의 스레드실행
ㄴ 하나의 레지스터와 스택으로 표현
• 다중 스레드
ㄴ 프로그램을 다수의 실행 단위로 나누어 실행
ㄴ 프로세스 내에서 자원을 공유하여자원생성과 관리의 중복을 최소화
ㄴ 서버가 많은 요청을 효율적으로 수행할수있는 환경을 제공
ㄴ 각각의 스레드가 고유의 레지스터와스택으로 표현됨
스레드 제어 블록(TCB, Thread Control Block )
- 정보 저장
- 프로세스 제어 블록은 스레드 제어 블록의 리스트
- 스레드 간에 보호 하지 않음
TCB의 내용
• 실행 상태 : 프로세서 레지스터, 프로그램 카운터, 스택 포인터
• 스케줄링 정보 : 상태(실행, 준비, 대기), 우선순위, 프로세서 시간
• 계정 정보
• 스케줄링 큐용 다양한 포인터
• 프로세스 제어 블록PCB을 포함하는 포인터
스레드를 지원하는 주체에 따라 사용자 수준의 스레드와 커널 수준의 스레드로 나뉜다.
사용자 수준의 스레드 개념
㉠ 사용자 영역의 스레드 라이브러리로 구현되어있다.
㉡ 스레드와 관련된 모든 행위를 사용자 영역에서 한다.
㉢ 스레드 교환에 커널이 개입하지 않아 커널에서 사용자 영역으로 전환 불필요하다.
㉣ 커널은 스레드가 아닌 프로세스를 한 단위로 인식, 프로세서 할당(프로세스 테이블 유지)
㉤ 단점 : 속도는 빠르지만 구현이 어렵다.
커널 수준 스레드의 개념
㉠ 커널이 스레드와 관련된 모든 작업을 관리한다.
㉡ 운영체제가 지원하는 스레드 기능으로 구현되며, 커널이 스레드의 생성 및 스케줄링 등을 관리한다.
㉢ 단점 : 구현이 쉽지만 속도가 느림
속도가 빠름 : 사용자 수준 스레드 , 속도가 느림 : 커널 수준 스레드
병행성 증진
응용 프로그램의 처리율을 향상
응용 프로그램의 응답시간 단축
실행 환경을 공유시켜 기억 장소의 낭비가 줄어듦
프로세스들 간의 통신 향상
접근 가능한 기억장치를 통해 효율적으로 통신.
10주차 2교시 - 병행 프로세스 개요
• 병행 프로세스 = 다중 프로그래밍에 사용
– 두 개 이상의 프로세스들이 동시에 존재하며 실행상태에 있는 것을 의미
– 한정된 컴퓨터 하드웨어나 자원을 공유하고, 동시에 작업을 수행하기 위해 사용하는 개념
– 프로세서 하나는 한 번에 프로세스 하나만 실행 할 수 있지만. 운영체제가 프로세서를 빠르게 전환, 프로세서 시간을 나눠 마치 프로세스 여러 개를 동시에 실행하는 것처럼 보이게 하는 것
– 여러 프로세스들이 독립적으로 실행되는 것을 독립적 병행프로세스, 서로 협력하며 동시에 실 행되는 것을 협동적 병행프로세스라고 한다.
• 서로 관련 없이 독립적으로 수행이나 -> 독립적 병행 프로세스(단일 처리 시스템)
• 다른 프로세스들과의 협력을 통해서 기능을 수행 -> 협력적 병행 프로세스
– 병행 프로세스는 다중 프로그래밍과 다중처리시스템이나 분산처리시스템에서 중요한 개념으로 사용된다.
– 협력적 병행 프로세스
• 제한된 자원을 공유하기 위하여 상호 작용이 필요
• 프로세스들을 동기화하지 않으면 교착상태, 임계영역 문제, 결과를 예측할 수 없는 상황 등 여러 문제 들이 발생
• 동기화 필요
병행성과 병렬성 비교
• 공통점: 동일한 시간 동안, 여러 프로세스를 동시 실행
• 차이점:
– 병렬성 : 다중 프로세서 시스템에서 동일한 시간에 별도의 프로세서에서 실행 하는 것
– 병행성 : 모두 동일한 시간에 실행 할 필요가 없는 것으로 예를 들어 병행 프로세스는 시분할로 각 프로세스의 실행 단계를 전환하여 어느 한 순간에는 프로세스 하나를 실행하도록 하는 방법으로 단일 프로세서 시스템에서도 가능함
– 한정된 컴퓨터 하드웨어나 자원을 공유하고, 동시에 작업을 수행하기 위해 사용하는
공유 영역 : 공유 자원으로 CPU, 메모리, 디스크, 입출력장치 버퍼등이 해당됨 (모든 프로세스가 동시에 공유)
=> 메모리 자원은 공유 영역에서 병렬(parallel)로 사용
=> 입출력 장치 일부나 프로세서는 한번에 프로세스 하나만 사용 할 수 있는 공유 자원임 - 한번에 프로세스 하나만 사용
• 병행 프로세스의 문제(협력적)는 컴퓨터 시스템의 자원에는 어느 한 시점에 하나의 프로세스가 할당 되어 수행되는데,
동시에 두 개 이상의 프로세스를 병행처리 하면 여러 가지 문제점이 발생한다.
일어나는 문제점들.
(프린터, 통신망 등은 공유자원이다)
교착 상태 문제(DEADLOCK)
=> 해결방법 : 임계구역 , 상호배제 기법 , 동기화 기법, 교착 상태 해결 < 중요
해결 방법 알아보기 < 중요
1. 상호배제 ( mutual exclusion ) 의 개념
- 병행 프로세스에서 프로세스 하나가 공유 자원 사용 시 다른 프로세스들이 동일한 일을 할 수 없도록 하는 방법(기법, 알고리즘)
§ 임계영역을 오직 한 프로세스만 배타적 독점적으로 사용하도록 하는 기술
§ 읽기 연산은 공유 데이터에 동시에 접근해도 문제 발생 않음.
§ 동기화 : 변수나 파일은 프로세스별로 하나씩 차례로 읽거나 쓰도록 해야 하는데,
공유 자원을 동시에 사용하지 못하게 실행을 제어하는 방법 뜻 함. (처리순서 결정해야함)
• 동기화는 순차적으로 재사용 가능한 자원을 공유하려고 상호작용하는 프로세스 사이에서 나타남
• 동기화로 상호배제 보장할 수 있지만, 이 과정에서 교착 상태와 기아 상태가 발생할 수 있음
임계자원 critical resource : 두 프로세스가 동시에 사용할 수 없는 공유 자원
임계영역(구역)critical section : 임계 자원(공유 데이터)에 접근하고 실행하는 프로그램 코드 부분
다수의 프로세스 접근 가능하지만, 어느 한 순간에는 프로세스 하나만 사용 가능
§ 상호배제의 조건
❶ 두 프로세스는 동시에 공유 자원에 진입 불가.
❷ 프로세스의 속도나 프로세서 수에 영향 받지 않음
❸ 공유 자원을 사용하는 프로세스만 다른 프로세스 차단 가능
❹ 프로세스가 공유 자원을 사용하려고 너무 오래 기다려서는 안 됨
임계영역 < 중요함
임계자원 critical resource : 두 프로세스가 동시에 사용할 수 없는 공유 자원
임계영역(구역)critical section : 임계 자원(공유 데이터)에 접근하고 실행하는 프로그램 코드 부분
다수의 프로세스 접근 가능하지만, 어느 한 순간에는 프로세스 하나만 사용 가능
-진입 영역은 각 프로제스가 임계 영역에 들어갈 수 있 도록 요청하는 영역
-TURN은 전역 변수로 0으로 초기화한 후 I가 아니면 대기하고 I이면 임계 영역에 진입한다.
-탈출 영역은 임계 영역에서 나가는 프로세스를 선택 하는 영역으로,TURN을 J로 변경한다.
-나머지 영역은 임계 영역을 나와 수행한다.
§ 임계 영역의 조건
§ 어떤 프로세스가 공유 자원을 접근(access)하고 있는 동안 그 프로세스는 임계 구역에 있다고 함.
§ 임계 구역에 접근한 프로세스에게는 상호 배제가 보장 되어야 함
❶ 상호배제 : 어떤 프로세스가 임계 영역에서 작업 중, 다른 프로세스 임계 영역 진입 불가
❷ 진행 : 임계 영역에 프로세스가 없는 상태에서 어떤 프로세스가 들어갈지 결정
❸ 한정 대기 : 다른 프로세스가 임계 영역을 무한정 기다리는 상황 방지 위해 임계 영역에 한 번 들어갔던 프로세스는 다음에 임계 영역에 다시 들어갈
• 임계 구역 문제 해결을 위한 세가지 충족요건
– 상호 배제
• 한 프로세스가 그들의 임계 구역에서 실행되고 있다면 다른 프로세스는 그 임계 구역에 들어갈 수 없다.
– 진행
• 임계구역으로 진입하려는 프로세스가 있을 경우, 진입을 결정하는데 참여할 수 있으며, 이 선택 은 무한 연기 되어서는 안 된다.
– 한정된 대기
• 진입을 요청한 이후부터 그 요청이 허용될 때까지 다른 프로세스들의 임계구역 진입허용 횟수에 한계가 있어야
• 임의의 프로세스의 기아(starvation)를 예방
소프트웨어적 구현 방법
:데커 알고리즘, 피터슨 알고리즘
하드웨어적 구현방법
:Test_And_Set 기법, Swap 명령어 기법
❶에서 P0은 flag[0]을 true로 설정, 자신이 임계 영역으로 들어간다 는 사실 알림
❷에서 while 문 검사하여 P1의 임계 영역 진입 여부 확인. P1의 flag[1]이 false이면
❸ P0이 임계 영역으로 진입하고, true이면
❹ P1이 임계 영역에 진입할 차례라서 플래그 false로 재설정 후
❺ while 문에서 순환하며 대기 여기서 공유 변수 turn은 두 프로세스 P0과 P1이 동시에 임계 영역 으로 들어가려고 충돌하는 것 방
11주차 3교시 - 프로세스 간 동기화 및 통신
병행 처리 문제 해결 방법 4가지
=>해결방법 : 임계구역, 상호 배제 기법, 동기화 기법, 교착 상태 해결 < 중...요....합ㄴ....ㅣ다..
• 동기화 기법은 두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대 한 처리순서를 결정하는 것으로 , 상호배제의 한 형태이다.
• 동기화를 구현할 수 있는 방법
– 세마포어 < 중요
• 상호 배제 기법의 단점은 임계 영역에 진입 할 수 없을 때 진입 조건을 반복적으로 조사해 바쁜 대기로 낭비 발생
• 세마포어의 진입 조건을 반복 조사하지 않고 진입 조건이 될 때 프로세스 상태를 확인해 프로세서 사이클의 낭비 방지
• N개의 공유 자원을 m개의 프로세스가 공유하기 위한 기법
• 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 하는 기법이다.
• 세마포어에는 P연산(wait 동작)과 V(signal 동작)이 사용된다.
– 모니터
• 내부의 프로시저와 데이터 정보를 은폐시켜서 다른 외부 프로시저가 접근하거나 변경하지 못하도록 하는 기법으로 모니터에는 wait 연산과 signal 연산이 사용된다.
• N개의 공유 자원을 m개의 프로세스가 공유하기 위한 기법
• Ex) n개의 프린터가 있는 경우, 프린터를 사용하고자 하는 다수 프로세스의 프린터 사용 관리 식당 대기 시스템과 버스 잔여 좌석 정보 제공 시스템
- N개의 공유 자원을 m개의 프로세스가 공유하기 위한 기법
- P(프로세스 대기하게 하는 wait 동작, 임계 영역에 진입하는 연산):원자명령(CPU 명령)
- V(대기 중인 프로세스 깨우려고 신호 보내는 signal 동작, 임계 영역에서 나오는 연산)):원자명령(CPU 명령)
- 세마포를 의미하는 S는 표준 단위 연산 P와 V로만 접근하는 정수 변수로 공유 자원의 개수를 나타남
- 프로세스가 자원을 사용하려고 할 경우 먼저 S를 통해 다른 프로세스가 자원을 공유하고 있는지 조사
- 자원을 점유 하였으면 자원이 점유 되었다는 것을 알리고 다른 프로세스가 이미 자원을 점유한 상태이면 기다린다.
모니터(Monitor)
모니터의 개념과 구조
§ 세마포의 오용으로 여러 가지 오류가 쉽게 발생하면 프로그램 작성 곤란. 이런 단점 극복 위해 등장
§ 핸슨Hansen 제안, 호Hoare 수정한 공유 자원과 이것의 임계 영역 관리 소프트웨어 구성체
§ 여러 프로세스들간의 공유 데이터와 임계 지역 코드들의 집합
§ 사용자 사이에서 통신하려고 동기화하고, 자원에 배타적으로 접근할 수 있도록 프로세스가 사용하는 병행 프 로그래밍 구조
모니터의 구조
내부의 프로시저와 데이터 정보를 은폐시켜서 다른 외부 프로시저가 접근하거나 변경하지 못하도록 하는 기법이다.
고급언어에서 개발자의 코드를 상호배제하게 끔 만든 추상화 데이터 형태(도구)
모니터의 정의
+여러 프로세스들간의 공유 데이터와 임계 지역 코드들의 집합
모니터의 기본 내용
• 모니터 진입 큐(entry queue)
• 모니터 내의 프로시져 수만큼 존재
• 상호 배제 메커니즘 자동 보장
• 모니터 내에는 항상 하나 이하의 프로세 스만 진입 가능
• 정보 은폐 (information hiding)
• 공유 데이터에 대한 접근
• 모니터 내에 진입하여 자신이 호출 한 프로시져를 실행하는 방법 외에 다른 방법으로 접근 불가능함
• 조건 큐 (condition queue)
• 모니터 내에 진입 후 공유 데이터의 값 이 원하는 값이 아닐 경우프로세스가 원 하는 조건에 해당하는 조건 큐에서 대기 함
• 신호제공자 큐 (signaler queue)
• 모니터에 항상 하나의 신호제공자 큐가 존재
• signal() 명령을 실행한 프로세스가 임시 대기
모니터 | 세마포 |
signal 연산으로 모니터 잠금 해제할 때만 다시 시작 | V 연산으로 사용자가 지연 없이 실행 재개 |
단점 : 프로그래밍 언어의 일부로 구현하고 컴파일러가 그 코드 생성해야한다. > 컴파일러가 운영체제를 이해해야 한다는 부담. |
|
즉, 병렬 프로그래밍에서는 세마포보다 모니터가 더 오류가 적고 쉽게 작성 가능하다.
1. 사용자들이 병행 프로그래밍을 보다 쉽게 할 수 있도록 지원
2. 객체지향 개념 가짐
3. 코딩 중 오류 발생 가능성을 크게 줄임
11주차 문제풀기 < 사실상 이걸 암기
스레드에 관한 설명으로 옳지 않은 것은?
가. 스레드는 하나의 프로세스 내에서 병행성을 증대시키기 위한 메커니즘이다.
나. 스레드는 프로세스의 일부 특성을 갖고 있기 때문에 정량프로세스라고도 한다.
다. 스레드를 동일 프로세스 환경에서 서로 독립적인 다중수행이 불가능하다.
라. 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.
다. 스레드는 해당 스레드를 위한 스택을 생성할 뿐 프로세스내의 코드,데이터, 힙영역의 메모리를 공유(다중수행가능)한다..
다수의 스레드가 수행되면 이를 멀티 스테드라고 함
=> 한 프로세스의 한 스레드가 존재하면 단일 스레드, 다수에 스레드가 존재하면 다중스레드
- 독립적인 스케줄링의 최소단위, 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능
다중 프로그래밍 운영체제에서 한 순간에 여러 개의 프로세스에 의하여 공유되는 데이터 및 자원에 대하여, 한 순간에는 반드시 하나의 프로세스에 의해서만 자원 또는 데이터가 사용되도록 하고, 이러한 자원이 프로세스에 의하여 반잡된 후 비로소 다른 프로세스에서 자원을 이용하거나 데이터를 접근 할 수 있도록 지정된 영역을 의미하는 것은?
가. locality
나. semaphore
다. Critical section
라. Working set
다. : Critical section = 임계영역(구역)
한 프로세스가 공유 메모리 혹은 공유 파일을 사용하고 있을 때 다른 프로세스들이 사용하지 못하도록 배제 시키는 제어 기법을 무엇이라고 하는가?
가. deadlock
나. Mutual exclusion
다. interrupt
라. Critical section
나. Mutual exclusion = 상호 배제 기법( 다른 프로세스들이 사용하지 못하도록 배제 시키는 제어 기법 < 문제에 정답이있다. 하지만 영어를 몰라서 틀렸다.
세마포어에 대한 설명으로 옳지 않은 것은?
가. dijkstra 가 제시한 상호배제 알고리즘이다.
나. 세마포어 변수는 양의 정수값 만을 가질 수 있다.
다. V 조작은 블록 큐에 대기 중인 프로세스를 깨우는 신호(wake up)로서, 흔히 signal 동작이라한다.
라. P조작은 임계영역을 사용하려는 프로세스들의 진입 여부를 결정하는 조작으로 흔히 wait 동작이라한다.
나. 세마포어 변수는 0 과 양의 정수값 만을 가질 수 있다.
모니터에 대한 설명으로 옳지 않은 것은?
가. 특정의 공유자원을 할당하는데 필요한 데이터 및 프로시저를 포함하는 병행성 구조이다.
나. 모니터 외부의 프로세스는 모니터 내부의 데이터를 직접 액세스 할 수 없다.
다. 모니터 내의 자원을 원하는 프로세스는 반드시 해당 모니터의 진입부를 호출해야 하고, 원하는 모든 프로세스는 동시에 모니터 내에 들어갈 수 있다.
라. 모니터에서 사용되는 연산은 wait와 signal이 있다.
다. :
- 모니터 내의 자원을 원하는 프로세스는 반드시 해당 모니터의 진입부를 호출해야 합니다.
- 그러나 모든 프로세스가 동시에 모니터 내에 들어갈 수 있는 것은 아닙니다. 모니터는 한 번에 하나의 프로세스나 스레드만 내부에 들어가도록 보장합니다. < GPT 왈
'📜✏️노트 자리없어서 적는 IT 지식📜✏️' 카테고리의 다른 글
운영체제 - (리뷰 정리 시험문제) (2) | 2024.06.15 |
---|---|
운영체제 - 12주차 (교착상태) (2) | 2024.06.14 |
운영체제 (10주차 - 디스크 스케줄링과 파일시스템(2)) (3) | 2024.06.14 |
운영체제 (10주차 - 디스크 스케줄링과 파일 시스템) (3) | 2024.06.13 |
운영체제 공부 (9주차 - 캐시 기억장치 관리) (0) | 2024.06.13 |