donaricano-btn

 상태 저장(stateful)/ 상태 비저장(stateless)


1. 정의

1) 상태 저장 (stateful)

- 상태를 가진다는 것은 과거에 부여한 '정보'를 저장해서 계속 활용할 수 있다는 것

- 세분화된 제어가 가능하지만 구조가 복잡, 복잡한 처리 가능

- ssh프로토콜, 병원진료 시스템

2) 상대 비저장 (stateless)

- 과거의 정보를 알 수 없다

- 고기능은 아니지만 간단, 성능이나 안정성 우수

- http 프로토콜, 마트에서 물건 사고 바로 계산


2. 사용되는 곳

1) 컴퓨터 내부 구조

- 거의 모든 곳에서 상태 저장이 사용

- CPU는 하나의 CPU에서 복수의 프로세스 처리, 상태저장 필요

2) 네트워크 통신

- HTTP 프로토콜을 사용, 비저장상태

- 상태가 없기 때문에 매번 같은 데이터를 반환한다

- 로그인 같은 상태저장이 필요 할 때는 세션을 사용

블로그 이미지

리딩리드

,
donaricano-btn

배타적제어(3) - 멀티프로세서 시스템


- 여러 개의 CPU 코어를 탑재한 컴퓨터는 동시에 복수의 프로세스나 스레드를 실행 할 수있어 배타적 제어가 어렵다


1. 하드웨어를 이용한 배타적 제어

- 멀티 코어 환경에서 사용

1) CPU

- 'test and set' 이라는 기능(명령)이 존재

- 여러 개의 CPU에서 확실하게 배타적 제어를 하기 위한 구조

2) 리눅스 커널

- 리눅스 커널 전체는 하나의 스핀락으로 보호

- 스핀락은 빅 커널락으로 불린다


블로그 이미지

리딩리드

,
donaricano-btn

배타적제어(2) - DBMS, OS


1. DBMS

- 특정 프로세스가 공유 데이터를 변경하고 있는 도중에 다른 프로세스가 해당 공유 데이터를 읽거나 공유 데이터를 동시에 변경하지 못하도록 배타적 제어를 한다

1) 래치(latch)(스핀락- spin-lock)

- 짧은 시간동안 락을 하는 방식

- CPU에서 의미없는 처리를 하면서 대기하는 방식

- 극히 단시간 락에서 사용

2) 슬립락(sleep-lock)

- 비교적 장시간 락을 유지

- 큐를 이용

3) 어댑티브락(adaptive-lock)

- 단순히 계속반복만하는 것이 아니라 스핀해서 락을 확보못하면 슬립으로 전환

- 상황에 따라 스핀할지 슬립할지 판단


2. OS

- 여러 프로세스나 스레드에서 빅 커널락을 이용해서 경합하면 CPU 코어가 여러개라도 병렬처리가 안되고 선행 처리가 끝날 때까지 기다려야한다

1) 빅 커널락(Big Kernel Lock)

- 리눅스 커널에서 사용

- 하나의 스핀락으로 유지된다

- 처리가 직렬화돼서 동시에 하나의 CPU만 커널 코드를 실행

- 이 부분은 병목지점이 되기 쉽다



블로그 이미지

리딩리드

,
donaricano-btn

배타적제어란 - 정의


1. 배타적 제어란?

- 여러 사람이 한 물건공유하는 상황에서 발생

- 동시에 사용할 시에 고장날 수 있다

- 병렬처리에서 필요

- 배타적제어 부분은 병목 현상이 발생할 수 있다


2. 배타적 제어의 예

1) 실 생활

- 회의실을 누군가 사용중이라면 사용중이라는 푯말을 놓는다

- 공실이라면 공실이라는 푯말을 놓는다

2) OS, DBMS

- 병렬처리를 위해 배타적 제어 사용

- 병렬처리시 공유데이터를 사용하면 부분적으로 직렬처리를 해야하는데 이때 배타적 제어 필요


3. 배타적 제어 특징

- 복수의 처리가 공유자(CPU, 메모리, 디스트 등)에 동시에 엑세스하면 불일치 발생하여 베타적 제어로 보호한다

- 특정 처리가 공유자원을 이용하고 있는 동안 다른 처리가 이용할 수 없게 해서 불일치가 발생하지 않도록 한다

- 필요 이상 배타적 제어를 사용하면 CPU가 여러 개 있더라도 하나밖에 사용할 수 없게된다

정말 필요한 곳만 배타적 제어를 하고 병렬처리를 늘린다



블로그 이미지

리딩리드

,