반응형

전체 보기 216

[ OS ] Condition Variables

조건이 성립하기 전까지 기다리는 것은 스레스에서 굉장히 유용하다. 하지만 이는 CPU 사이클이 낭비된다. 이를 해결할 수 있는 것은 Condition Variables이다. Condition Variables는 큐이다. 스레드가 조건에 성립하지 않아 실행되지 않을 때 큐에 배치된다. 다른 스레드가 상태를 바꾸고 큐에 대기중인 스레드를 깨워 계속 진행할 수 있다. pthread_cond_wait(); // 스레드가 잠들 때 사용 pthread_cond_signal(); // 자는 애를 깨움 함수는 위와같으며 인자로는 mutex가 들어간다. int done = 0; pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t c = PTHREAD_COND_I..

[ OS ] Locks_slides

1. Evaluating locks critical sectiond에 여러 스레드기 들어가지 않도록 조심해야한다. lock이 풀리면 모든 스레드가 그것을 얻을 공평한 기회를 얻어야한다. 즉 굶는 스레스다 있으면 안된다. 또, lock으로 인해 over head가 일어나서도 안된다. 이 방법은 lock 하면 interrupt를 막고 unlock 하면 interrupt를 받아드리는 방법이다. 이 방법은 단점이 많다. - interrupt를 막고 받고 하려면 권한이 있어야한다 - 멀티 프로세스 환경에서는 통하지 않는다. (interrupt) 2. Spin locks typedef struct __lock_t { int flag; } lock_t; //구조체 선언 void init(lock_t *mutex) {..

[ OS ] Concurrency and Thread

1. Multi-threaded program 단일 스레스는 프로세스와 비슷하게 각 스레스 자체 PC와 레지스터, 스레드만의 스택을 가지고 있다. 하지만 멀티 스레드는 프로세스와 다르다. - 동일한 주소공간을 공유하여 같은 데이터에 접근할 수 있음 - 동일한 주소공간을 갖고 있어 페이지 테이블을 전환할 필요 없음 (context switch 필요 없음) * context switch는 프로세스가 바뀔 때만 일어남 스레드는 TCB(Thread Control Block)으로 관리된다. 스레드는 Heap 영역과 Program Code(read only) 부분은 공유하고 stack 영역은 스레드별로 가지고 있다. 1.1 스레드의 장점 1) 병렬성을 증가시킬 수 있다 - CPU의 개수가 계속 늘어나고 있는데 이때..

[ C++ ] <빙고게임> 프로젝트 과제 요구사항 정리

프로그램 내용 1. 사용자와 컴퓨터를 위한 빙고판 생성 2. 1부터 N제곱 까지 각각 랜덤하게 위치 3. 가로 세로 대각선 한줄 완성 시 승리, 모두가 열렸는데도 승패가 결정되지 않는다면 무승부 구현 내용 1. 메뉴를 만들어서 운영 (새 게임, 이어하기, 종료 / 종료 선택 전까지 반복) 2. 빙고판의 크기는 동적으로 입력받을 것 (3~9 제한) 3. 표준템플릿 라이브러리 사용가능 4. 사용자와 컴퓨터가 선택한 빙고판의 숫자는 서로 다른 문자로 출력 5. 승패가 결정된다면 둘의 빙고판 출력 6. 윈도우 API를 사용하여 사용자 인터페이스 개선 - 메뉴선택, 빙고판 번호 키보드로 선택 조건 1. 모든 변수 및 함수는 클래스에 포함되어야 한다 (friend 함수를 이용하여하는 cout을 통한 객체출력, wi..

프로젝트 2022.06.02

[ 13강 ] 상속

포함 vs 상속 포함 - A가 B를 가지고 있는 관계 ex) 자동차는 타이어를 가지고 있다. 상속 - A가 B인 관계 ex) 사과는 과일이다. 상속 기존 클래스에서 새로운 클래스 파생 코드 재사용 파생 클래스는 다른 클래스의 기본 클래스로 제공 형식 public - 부모클래스의 정의 그대로 받는다 protected - 부모클래스의 public멤버를 protected로 받는다 private - 부모클래스의 public, protected 멤버들을 private 로 받는다. class BClass : public AClass{} // BClass가 AClass를 public 상속받음 생성자 자식생성자 호출시 할아버지-> 부모-> 자식 순서로 호출 부모생성자도 지정해줘야함

[ OS ] Translation-Lookaside Buffer

1. paging paging 은 주소공간을 페이지 단위로 다른다. 이는 많은 양의 정보를 필요로한다. 또, 각 가상 주소에 대해 추가 메모리 조회가 필요하다. 이 때 어떤 하드웨어 지원과 OS이 필요한가? 2. Translation-Lookaside Buffer (TLB) MMU(메모리와 CPU에 관련되게 일하는 하드웨어)의 일부분이다. 이는 스스로는 아무것도 하지 못하고 OS가 이를 동작시켜줘야한다. Address-translation에 대한 캐시이다. 메모리까지 가서 table을 보기에는 오래걸리니까 캐시에 저장한다. 3. TLB의 기본 알고리즘 VPN = (VirtualAddress & VPN_MASK) >> SHIFT //상위 비트를 저장 (Success, TlbEntry) = TLB_Looku..

[ OS ] Paging

1. Paging 1.1 Segmentation의 문제점 세그멘테이션은 가변적인 메모리 조각들을 다루기 때문에 항상 Memory compaction를 해줘야한다. 하지만 이 과정이 마냥 간단하지는 않다. 1.2 paging 페이징은 실제 메모리를 페이지 프레임이라고 하는 고정 크기의 슬롯의 배열로 보는 방법이다. 프로세스가 주소 공간을 사용한느 방법에 관계없이 주소 공간의 추상화를 효과적으로 사용할 수 있다. 어떤 용도로 쓸건지에 대한 정보가 필요 없다. free 공간을 다루를 것이 더 간단해 질 수 있다. 1.3 Address Translation (Page table) Page table 에는 주소 공간의 각 가상페이지에 대한 물리 주소가 저장되어있다. 가상 주소는 인덱스 번호와 같으므로 생략하고 물..

[ OS ] Segmentation

1. Segmentation 1.1 base and bounds registers의 문제점 전에 배운 가상 공간 배치방법의 문제점은 프로그램이 크다면 물리메모리에 자리 찾아주기 힘들고(연속적이어야 하기 때문). 사용되지 않은구간이 너무 많다는 것이다 (free) 1.2 Segment 1) 세그먼트는 특정 길이의 주소공간의 연속된 부분이다 (코드, 스택, 힙) 2) 각각에 base and bounds가 존재하며 세그먼트 각각이 연속적일 필요는 없다. 1.3 Segmentation 1) 물리적 메모리의 서로 다른 부분에 세그먼트를 배치한다 2) 물리적 메모리를 free로 채우지 않는다. - 사용된 메모리만 공간을 할당한다 - 사용하지 않는 주소 공간에 다른 공간을 수용할 수 있음 왼쪽은 기존의 물리 메모리이..

반응형