ch3_part2 추가해서 시작
Producer-Consumer Problem
두 경우 모두 bounded buffer(용량 제한이 있는, 현실적인, 버퍼)
•
Consumer wait : buffer empty
•
Producer wait : buffer full
Bounded Buffer
In : 버퍼에서 다음으로 비어있는 위치
Out : 버퍼에서 첫번째로 채워져 있는 위치
그렇기 때문에 사진 속 상황에서 In이 가리키는 인덱스 위치와 Out이 가리키는 인덱스 위치가 다름
만약 IN == OUT인 경우엔, 버퍼가 비워져있다는 의미
((In+1)%(buffer_size)) == out → buffer is empty
프로세스들이 메모리를 공유함하는 방식은
결국 개발자가 분기를 추가함으로써,
공유메모리에 접근, 조작하는 방식을 다듬어야한다.
결론
Producer - Consumer Problem에서
Unbounded(Infinite) Buffer
•
Producer
◦
신경 쓰지 않아도 됨
•
Consumer
◦
empty 여부 확인
Bounded(Finite) Buffer
•
Producer
◦
버퍼가 full 상태인지 확인
(Code 추가 필요)
◦
버퍼가 full이라면,
Consumer가 데이터 소비(처리)
→ 공간 발생
→ Producer process wake up
Producer는
버퍼에 빈 공간이 생기는 것을 기다린다. 또한, 버퍼에 새로운 데이터를 넣었다는 signal을 발생시켜야한다.
Consumer는
소비가능한 데이터 존재 여부에 대한 signal을 기다리야한다. 또한, 버퍼에서 데이터를 소비(처리)했다는 signal을 발생시켜야한다.
️ 예제 1
️ 예제 2
Handle
응용 프로그램은 바로 하드웨어 자원을 사용할 수 없으니, OS를 통해서 자원 사용을 요청하거나 할당 받습니다.
이런 식으로 응용프로그램과 운영체제가 원하는 리소스를 주고 받는 것을 Handle이라고 한다
Pipes
통신을 하는 데에 있어서 데이터를 송수신하는 길
•
Ordinary Pipes(단방향)
◦
상대적으로 부모-자식 프로세스가 나눠져 있음
수신받는 쪽이 Consumer, 송신하는 쪽이 Producer
사용하는 경우에 따라,
Read, Write 등과 같이 불리기도 한다
•
Named Pipes(양방향)
Socket
서로 다른 컴퓨터의 프로세스끼리 통신을 하는 경우에, IP주소와 포트 번호를 알아야 할 수 있습니다.
•
프로세스별 두 개의 소켓
•
IP + Port Number
여기선, 프로세스 별로 역할이 있어서, 각자 해당 역할을 수행한다. 정도만 기억
자세한건 네트워크 시간에….
여기서부턴 ch4 내용
프로세스 안에서 여러 개의 Thread를 사용 가능합니다.
병행성(Concurrency)에 대해서도 알아보겠습니다
Motivation
여러 일을 한꺼번에 하려고 멀티쓰레드를 사용하는것
하나의 프로그램이 IO처리만 한다던지, CPU를 필요로 하지 않는 경우도 존재합니다.
하나의 프로그램 안에서도 여러 쓰레드가 존재하기에, 여러 작업을 병행할 수 있습니다
다음 하나하나가 하나의 작업으로 보면 됩니다
•
Update display
•
Fetch Data
•
Spell checking
•
Answer a network request
Thread
한 개의 응용프로그램( 또는 프로세스)는 다중 스레드를 지님(Multi-threads)
•
웹 브라우저
•
워드
•
웹 서버
◦
만약, 웹 서버가 하나의 클라이언트에게만 서비스 가능한 경우가 단일 스레드에 해당
서로 다른 프로세스는 메모리를 별도 할당 받음
여러개의 스레드가 하나의 프로세스에 존재하는 경우엔, 메모리를 공유
단일 스레드 프로세스
•
처리할 일(요청)이 생길때마다 해당되는 프로세스를 새로 생성
◦
프로세스 생성엔, 많은 시간 및 자원이 필요
→ 그러니, 단일 프로세스 내 여러 개의 스레드를 만드는게 효율적
그러나, 항상 좋다고는 말 못 함
다중 스레드(Multi-Thread)
웹 서버는 Listen 스레드를 여러 개 생성
EX) 네이버 서버
•
OS kernel
시스템을 부트하는 동안
장치관리, 메모리 관리, 인터럽트 핸들링 등의 스레드가 생성 및 작업 수행
단일 스레드(Single-Thread)
•
Pros
•
Cons



