일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 후기
- C#
- 추천
- 홍대
- 홍대 방탈출 추천
- 공포 방탈출
- 시스템 프로그래밍
- 넥스트에디션
- 홍대 덤앤더머
- 강남 방탈출
- 이스케이퍼스
- 방탈출 후기
- 넥스트에디션 2호점
- 정렬 알고리즘
- 필활
- 홍대 방탈출
- 꽃길
- 방탈출 추천
- 윈도우 프로그래밍
- 방탈출 리뷰
- C++ 자료구조
- 이스케이퍼스 2호점
- PC VR
- 방탈출
- Android
- 개발
- 2021 방탈출 추천
- C 자료구조
- 유니티
- Unity
- Today
- Total
목록시스템 프로그래밍 (13)
행복한 연어의 이야기
1. 메모리 계층 메모리의 범위와 종류 메인 메모리 RAM 레지스터 CPU 안에 내장되어 있어 연산을 위한 저장소 캐시 CPU 와 RAM 사이에서 중간 저장소 역할을 하는 메모리 캐시메모리는 CPU 의 일부가 아니라 CPU 에 근접해 있는 메모리 개념이다. 하드디스크와 이외 저장장치들 하드디스크. SD 카드, CD - ROM 등 메모리 계층 구조 기본적으로 CPU 에 가까울수록 빠르고 멀수록 속도가 느리다. 반대로 용량은 CPU 에 가까울수록 작고 멀수록 커지며 가격도 마찬가지이다. CPU 가 메모리를 읽어들이는 방식은 다음과 같다. 레지스터에서 찾는 데이터가 없으면 L1 캐쉬에서 찾는다. L1 캐쉬에서 찾는 데이터가 없으면 L2 캐쉬에서 찾는다. L2 캐쉬에서 찾는 데이터가 없으면 메인 메모리에서 찾는..
1. 실행순서에 있어서의 동기화 메모리에 접근하는 쓰레드의 실행순서를 동기화한다. 즉 실행순서 동기화는 메모리 접근 동기화를 포함하는 개념이다. 이벤트 기반의 동기화 (커널 모드 동기화) 쓰레드나 프로세스 커널 오브젝트의 경우 처음에 Non-Signaled 상태로 생성되며 종료될 경우 Signaled 상태로 자동으로 변경된다. 하지만 이벤트 커널 오브젝트는 자동으로 Signaled 상태가 되지 않아 수동으로 변경 해주어야 한다. WaitForSingleObject 함수를 호출한 쓰레드(뮤텍스 등)의 경우 함수 호출 완료 후 Signaled 상태가 되는데 이벤트 커널 오브젝트는 2번째 인자 bManualReset 로 자동으로 Signaled 상태로 변경이 될지 (이하 자동 모드), 계속 Non-Signal..
1. 쓰레드 동기화란 무엇인가? 두가지 관점에서의 쓰레드 동기화 실행순서의 동기화 쓰레드의 실행순서를 정의하고, 이 순서에 반드시 따르도록 하는 것 메모리 접근에 대한 동기화 메모리 접근에 있어서 동시 접근을 막는 것 쓰레드 동기화에 있어서의 두 가지 방법 유저모드 동기화 커널 코드가 실행되지 않는 동기화 기법 성능상의 이점이 있지만 기능상의 제한이 있다. 커널모드 동기화 커널에서 제공하는 동기화 기능을 활용하는 방법 관련 함수가 호출할때마다 커널모드로 전환이 되어 성능 저하로 이어지만 다양한 기능을 제공을 받을 수 있다. 2. 임계 영역(Critical Section) 접근 동기화 (메모리 접근에 대한 동기화) 임계영역에 대한 이해 메모리 접근에 있어서 동기화와 관련된 내용이다. 임계 영역이란 한순간에..
1. Windows 에서의 쓰레드 생성과 소멸 쓰레드의 생성 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//핸들 상속 여부 SIZE_T dwStackSize,//쓰레드에게 할당되는 스택 크기 LPTHREAD_START_ROUTINE lpStartAddress,//쓰레드의 main 역할을 하는 함수 LPVOID lpParameter,//쓰레드 함수에 전달할 인자 DWORD dwCreationFlags,//쓰레드의 생성 및 실행을 조절 LPDWORD lpThreadId//쓰레드의 ID를 전달 받기 위한 주소값 ); WIndows 에서 메모리가 허용하는 만큼 쓰레드를 생성 가능하다. 멀티 쓰레드 기반 프로그래밍에서 쓰레드의 흐름을 예측하는 것..
1. 쓰레드란 무엇인가? 두가지 이상의 일을 동시에 처리하기 위해서 혹은 둘 이상의 실행 흐름이 필요해서 추가적으로 프로세스를 생성하는 작업은 상당히 부담스럽다. 많은 프로세스의 생성은 빈번한 컨텍스트 스위칭으로 이어져 성능에 영향을 미치기 때문이다. 만약 A 프로세스와 B 프로세스가 공유하는 컨텍스트 정보가 있다면 컨텍스트 스위칭의 부담을 줄일 수 있을것이다. 별개의 프로그램을 실행한다면 프로세스를 별도로 실행해야하지만 하나의 프로그램에서 둘 이상의 실행흐름을 두는 상황을 위해 쓰레드가 디자인 되었다. 정리하자면 다음과 같다. 1. 쓰레드는 하나의 프로그램 내에서 여러개의 실행 흐름을 두기 위한 모델이다. 2. 쓰레드는 프로세스처럼 완벽히 독립적인 구조가 아니다. 쓰레드들 사이에서 공유하는 요소들이 있..
1. 절차적 함수호출(Procedure Call) 지원 CPU 모델 스택 프레임 구조 함수내에 선언된 변수가 스택에 할당되는 것은 이미 알고 있다. 함수 호출 과정에서 할당되는 메모리 블록을 스택 프레임이라고 한다. 함수가 반환되면 그 함수의 스택 프레임을 날린다. 스택 포인터(Stack Pointer) 레지스터 스택은 LIFO 구조를 가지고 있다. 스택을 쌓거나 반환하기 위해서는 TOP 의 위치를 기억해야하는데 CPU 레지스터에 그 역할을 하는 sp(Stack Pointer) 라는 이름의 레지스터가 존재한다. 우리는 이미 4. 컴퓨터 구조 두번째에서 r5 레지스터를 sp(스택 포인터) 레지스터로 디자인 해 두었다. 함수 호출시 선언된 변수의 크기만큼 sp 는 올라가게 되는데 호출된 함수가 종료 될 경우..