전체 글
-
조건 변수, 생산자/소비자 문제운영체제 2024. 4. 18. 21:51
락은 상호배제를 위해서 조건변수는 동기화를 위해서 void *child(void *arg) { printf("child\n"); return NULL; } int main(int argc, char *argv[]) { printf("parent: begin\n"); pthread_t c; pthread_create(&c, NULL, child, NULL); printf("parent: end\n"); return 0; } 부모 스레드와 자식 스레드 중 무엇이 먼저 끝날지 알 수 없음. volatile int done = 0; void *child(void *arg) { printf("child\n"); done = 1; return NULL; } int main(int argc, char *argv[])..
-
Lock-based Concurrent Data Structure운영체제 2024. 4. 18. 14:37
Cuncurrent Counters typedef struct __counter_t { int value; } counter_t; void init(counter_t *c) { c->value = 0; } void increment(counter_t *c) { c->value++; } void decrement(counter_t *c) { c->value--; } int get(counter_t *c) { return c->value; } Traditional 방식 락을 사용하지 않는 카운터: 레이스 컨디션에서 부정확함 typedef sturct __counter_t { int value; pthread_mutex_t lock; } counter_t; void init(counter_t *c) { c->..
-
TCP #3 Flow Control & Congestion Control네트워크 2024. 4. 12. 20:28
흐름 제어: 수신자 측에서 문제가 생기는 경우(버퍼가 꽉 차서 패킷 손실)혼잡 제어: 네트워크 상에 문제가 생긴 거(라우터 큐가 꽉 차서 패킷 손실 / 큐에서 나갈 때까지 딜레이가 긴 경우) 송신자가 이 두개를 구분할 수 있을까?할 수 있다 받는 쪽에서 문제가 생기는 건 헤더에 recieve window(rwnd)값을 보고 어느정도 알 수 있다.네트워크에 문제가 생기는 건 IP 계층의 도움을 받아 가능하다.* 라우터에서 문제를 파악하면 IP의 ECN을 활성화하고* 수신 측에서는 TCP의 ECE를 1로 바꿔서 아크를 보내면 네트워크에 문제가 있다는 것을 파악 가능 구분이 가능은 한데, 문제는 두가지 문제에 따로 대처하기 보다는 같이 대처한다.일단 설명은 두 가지로 나눠서 가능하다...
-
Lock의 구현운영체제 2024. 4. 11. 23:44
락: 상호배제를 위한 API 이걸 어떻게 구현할 것이냐?.. 실제로는 하드웨어와 OS의 협업 1. 인터럽트로 2. 소프트웨어만 only approach 3. 소프트웨어가 하드웨어와 협업 락의 평가 방법 1. 정확성 : 상호 배제가 보장되는가 2. 공정성 : 기아 상태에 빠지는 스레드가 없는가 3. 성능 : 락, 언락에 의한 오버헤드나 낭비가 없는가 락 사이즈 이슈. 여러 공유 자원이 있을 때 Coarse-grained lock : 하나의 락으로 보호 - 장점: 심플 - 단점: 병행성이 별로 Fine-grained lock : 각각을 보호하는 락 - 장점: 병행성 굿 - 단점: 복잡 실제 락의 구현 1) Disable Interrupt void lock() { DisableInterrupts(); } vo..
-
멀티 스레드 / 경쟁 상태, 공유자원, 임계영역, 상호배제운영체제 2024. 4. 10. 22:48
스레드: 제어의 흐름 프로세스: 제어의 흐름 + 수행을 하기 위한 자원 멀티 스레드 프로세스: 제어의 흐름들 + 수행을 하기 위한 자원 -> 자원의 공유가 발생, 경쟁. 컨커런시 제어 필요 컴퓨터 자원 - CPU(레지스터) - 어드레스 스페이스 (코드 데이터 스탭 힙) - 파일 어떻게 이런 자원을 관리하느냐 프로세스 모델 - 배타적으로 자원을 사용 - fork는 모든 자원을 다 새로 만듦 스레드 모델 - 필요한 자원들 중 몇몇만 공유, CPU나 스택은 따로 가짐 - 공유: 코드, 데이터, 힙, 파일 당연히 스레드가 더 빠르고, 공유하는 측면에서도 스레드가 좋음 -> 속도가 유리 프로세스는 한 프로세스가 죽어도 다른 프로세스에 영향을 안끼치지만, 스레드는 같은 프로세스 내 한 스레드가 죽으면 다 죽음 ->..
-
CIA / Authenticaion, Authorization, Non-repudiation보안개론 2024. 4. 10. 19:30
IT 컴포넌트와 CIA 하드웨어 - 가용성 : 장비의 도용, 장비의 불능화 ex) 장악하고 락하는 경우 소프트웨어 - 가용성 ex) 프로그램 삭제, 유저 액세스 거부 - 비밀성 ex) 허락을 받지 않은, 불법 복제 - 무결성 ex) 프로그램 변조, 리패키징 어택 데이터 - 가용성 ex) 파일 삭제, 유저 액세스 거부 - 비밀성 ex) 인가되지 않은 읽기, 데이터에 대한 통계 분석 (이 사람이 누구랑, 어디서 통신..) - 무결성 ex) 기존 파일의 수정.. 특히 랜섬웨어 (데이터를 암호화 시키는 것, + 가용성도 깨트리는 공격이다) 커뮤니케이션 라인(네트워크) - 가용성 ex) 선 절단, 메시지 삭제 및 망가뜨리기, 좀비 피시를 이용한 플루딩 공격(디도스) - 비밀성 ex) 패킷 캡쳐, 트래픽 패턴 분석..
-
TCP #2 TCP 플래그, 시퀀스 넘버와 누적 ACK네트워크 2024. 4. 10. 01:16
Source Port # 16 bits Dest Port # 16bits Sequence Numner 32bits Acknowledgrment Number 32bits Head len 4bits now used 6bits U A P R S F Receive Window 16 bits Checksum 16bits Urg Data Pointer 16bits Options (variable length) Application Data (variable length) 포트 번호가 있으니 이걸로 멀티플렉싱, 디멀티플렉싱 - Sequence Number: 시작 지점은 OS가 부여. 악의적으로 캐치 시 도용이 가능해기 때문에 처음엔 랜덤으로 부여됨 그 다음부터는 보내는 데이터의 양에 따라 달라짐. 100번으로 보내고..
-
Cache Affinity / job의 실행 시간 예측운영체제 2024. 4. 8. 23:49
멀티 프로세스 멀티 코어 프로세서: 칩, 소켓 멀티 코어: 한 프로세서에 여러 개의 코어 멀티 프로세서: 여러 개의 프로세서 모던 컴퓨터는 멀티코어.. 이제 많아서 매니 코어라고도 하는데, 하이퍼스레딩까지 문제. 패럴랠 프로드램, 병렬 처리.. 어떻게 스케줄링 할 것인가(로드 밸런싱) 캐시: 작고 빠른 메모리. L1, L2, LLC.. 지역성(로컬리티) : 특정한 데이터가 많이 사용된다 시간적 지역성: 최근에 사용한 데이터를 많이 사용함 (반복문, 스택) 공간적 지역성: 어떤 데이터를 쓰면 그 주변 데이터도 많이 씀 (배열) -> 프로그램이 가지는 내재적 특성, 이걸 스케줄링 시 활용 CPU는 가능하면 메모리로 안내려가고 캐시에서 데이터를 가져오는게 좋음(캐시 히트) 그래서 라이트할 때도 지연 쓰기를 할..