donaricano-btn

가변길이(variable-length)/고정길이(fixed-length)


1. 가변길이/고정길이란?

- 컴퓨터에서 처리하는 데이터도 정해진 상자 안에 저장

- 미리 사이즈가 정해져 있다면 고정길이, 정해져 있지 않다면 가변길이 

- 분류별로 정해져있는 칸막이 책꽂이(고정길이)

- 책 칸막이가 움직이면서 분류 조절(가변길이)


2. 특징

- 가변길이 : 공간을 유용하게 활용하지만 성능이 불안정

- 고정길이 : 쓸데없이 공간이 생기지만 성능면에서 좋다


3. 사용되는 곳

1) 파일 시스템

- 윈도우즈에 NTFS라 불리는 파일 시스템이 있다

- 파일 시스템에서 고정 길이로 각종 파일을 저장한다

- 파일 크기는 97.5KB 이지만 할당은 100KB로 고정되어서 저장된다

2) 네트워크

- 데이터 전송시 가변으로 할지 고정으로 할지 결정

- 만약 2000byte의 데이터라면

- TCP/IP로 전송할 데이터는 최대크기(MMS) 1460byte로 고정되서 전송

- 나머지 540byte는 가변적으로 전송된다


블로그 이미지

리딩리드

,
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만 커널 코드를 실행

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



블로그 이미지

리딩리드

,