일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Unity #Indie Game
- STCF
- Security
- 게임개발
- information hiding
- 배경 그림
- stride
- 메카님
- DSP
- 유스케이스
- SJF
- 게임 개발
- polymorphism
- Trap
- MLFQ
- frequency-domain spectrum analysis
- unity
- Waterfall
- link layer
- OWASP
- OSI 7계층
- 유니티
- AINCAA
- 운영체제
- SDLC
- protection
- DP
- MAC
- 컴퓨터 네트워크
- FIFO
- Today
- Total
목록전체 글 (240)
다양한 기록
디바이스 디바이스를 볼 때는 버스를 중심으로 보게 된다과거 - 계층 구조- 메모리 버스(시스템 버스): CPU와 메모리 용도. 빠르고 비싸고 짧음- I/O 버스: SCSI, SATA, USB.. 느리고 싸고 긺** I/O버스 중 빠른 애들은 별도의 버스 사용 (그래픽 카드) 모던 시스템멀티코어, 누마 시스템 등.. -> 네트워크 형태Special interconnect: Memory interconnect, Graphic interconnect- Memory interconnect : 메쉬 형태. (QPI = QuickPath Interconnect, Hyperport)- Graphic interconnect (PCIe = Peripheral Component Interconnect Express.. 주..
컨커런시 버그 (타이밍 버그)발생할 수도 있고 아닐 수도 있음 종류논 데드락 버그원자성 위배- 스레드들이 동시에 동작할 경우 문제가 됨- 락으로 해결 오더링 문제- 특정 스레드 이후에 실행되는게 보장되어야 문제가 없는 경우- 조건변수나 세마포 사용데드락 (교착 상태)2개 이상의 스레드가 발생하지 않을 사건을 기다리게 되는 사건 4가지 조건을 모두 만족해야 발생1. Mutual exclusion2. Hold-and-Wait3. No preemption for resource4. Circular wait 데드락의 대처1. 데드락 예방2. 데드락 회피3. 데드락 발견 및 회복 데드락 예방1. Hold-and-Wait 없애기모든 락을 한번에, 원자적으로 잡아야 함-> 큰 락을 잡고 락1, 락2.. 를 잡을 수 ..
락을 위해서도 조건변수를 위해서도 사용 가능 sem_init(semaphore, p_shared, initial_value) semaphre : 사용할 세마포 p_shared : 프로세스 간 쉐어, 안하면 0으로 설정하면 됨 initial_value : 이걸 어떻게 사용할 건지에 따라 바이너리 세마포, 카운팅 세마포. 사용법이 다름 int sem_wait(sem_t *s) // 세마포의 값을 1 내리고 음수면 웨이트 int sem_post(sem_t *s) // 세마포의 값을 1 올리고 대기 중인 스레드 하나 꺠우기 두 함수를 사용해서 세마포 사용 sem_t m; sem_init(&m, 0, 1); sem_wait(&m); // critical section sem_post(&m); 락으로 사용하는 경우..
락은 상호배제를 위해서 조건변수는 동기화를 위해서 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[])..
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->..
흐름 제어: 수신자 측에서 문제가 생기는 경우(버퍼가 꽉 차서 패킷 손실)혼잡 제어: 네트워크 상에 문제가 생긴 거(라우터 큐가 꽉 차서 패킷 손실 / 큐에서 나갈 때까지 딜레이가 긴 경우) 송신자가 이 두개를 구분할 수 있을까?할 수 있다 받는 쪽에서 문제가 생기는 건 헤더에 recieve window(rwnd)값을 보고 어느정도 알 수 있다.네트워크에 문제가 생기는 건 IP 계층의 도움을 받아 가능하다.* 라우터에서 문제를 파악하면 IP의 ECN을 활성화하고* 수신 측에서는 TCP의 ECE를 1로 바꿔서 아크를 보내면 네트워크에 문제가 있다는 것을 파악 가능 구분이 가능은 한데, 문제는 두가지 문제에 따로 대처하기 보다는 같이 대처한다.일단 설명은 두 가지로 나눠서 가능하다...
락: 상호배제를 위한 API 이걸 어떻게 구현할 것이냐?.. 실제로는 하드웨어와 OS의 협업 1. 인터럽트로 2. 소프트웨어만 only approach 3. 소프트웨어가 하드웨어와 협업 락의 평가 방법 1. 정확성 : 상호 배제가 보장되는가 2. 공정성 : 기아 상태에 빠지는 스레드가 없는가 3. 성능 : 락, 언락에 의한 오버헤드나 낭비가 없는가 락 사이즈 이슈. 여러 공유 자원이 있을 때 Coarse-grained lock : 하나의 락으로 보호 - 장점: 심플 - 단점: 병행성이 별로 Fine-grained lock : 각각을 보호하는 락 - 장점: 병행성 굿 - 단점: 복잡 실제 락의 구현 1) Disable Interrupt void lock() { DisableInterrupts(); } vo..
스레드: 제어의 흐름 프로세스: 제어의 흐름 + 수행을 하기 위한 자원 멀티 스레드 프로세스: 제어의 흐름들 + 수행을 하기 위한 자원 -> 자원의 공유가 발생, 경쟁. 컨커런시 제어 필요 컴퓨터 자원 - CPU(레지스터) - 어드레스 스페이스 (코드 데이터 스탭 힙) - 파일 어떻게 이런 자원을 관리하느냐 프로세스 모델 - 배타적으로 자원을 사용 - fork는 모든 자원을 다 새로 만듦 스레드 모델 - 필요한 자원들 중 몇몇만 공유, CPU나 스택은 따로 가짐 - 공유: 코드, 데이터, 힙, 파일 당연히 스레드가 더 빠르고, 공유하는 측면에서도 스레드가 좋음 -> 속도가 유리 프로세스는 한 프로세스가 죽어도 다른 프로세스에 영향을 안끼치지만, 스레드는 같은 프로세스 내 한 스레드가 죽으면 다 죽음 ->..