| 니앙팽이 - 멀티스레딩 | 6 | 스레드
·
CS/OS
⏱️ 6. 스레드 ① 스레드간 공유가능한 데이터프로세스 ID : 메타데이터파일 : 애플리케이션이 읽고 쓰기위해 여는 파일. 코드 : CPU에서 실행되는 프로그램의 명령어 힙(Data) : 애플리케이션에 필요한 데이터② 스레드간 공유 되지 않는 데이터스택 : 메모리영역 지역 변수, 함수레지스터 PC : 명령 포인터📄 1. 스레드 CPU에서 실행되며, 프로세스보다 더 작은 "최소 수행단위" 하나의 프로세스에는 동시에 실행되는 여러개의 스레드가 존재함위의 설명 그대로 코드 수행를 하는 최소 수행 단위 이며, 프로세스보다 더 적은 비용을 사용한다.그 이유는 프로세스의 자원을 일부 공유를 하고, 개별적인 자원이 프로세스보다 더 적기 때문.생성과 삭제가 빠르고, Process Context Switcing VS ..
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도
·
CS/OS
⏱️ 5. 성능 평가 척도 앱 성능에 대한 두가지 기준 (지연 시간 & 처리량) 성능은 시나리오와 용례에 따라 완전히 다르게 측정될 수 있습니다.병행 실행의 가지가 있는지 없는지는 다음 요소를 확인해 봐야한다.① Latency (지연시간) : Data Parallelism 하나의 큰 작업을 SubTask로 나눠서 병렬로 진행할때 주로 사용한다Ex). 연산, 정렬, 분할정복② Throughput (단위시간당 처리량) : Task parallelism 작업간 서로 별로 연관이 없는 독립적인 Job을 처리할때 사용함Ex). 비동기 I/O, 네트워크, DB📄 1. 지연시간 (Latency) : 하나의 Task(작업)을 처리하는 시간 1). Optimize Latency 멀티 스레딩으로 지연시간의 최적화를 달성..
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스
·
CS/OS
⏱️ 4. 프로세스 📄 1. 프로세스의 PCB 구성 요소 PCB 구성 요소설명① 프로세스 식별자 (PID)② 프로세스 이름③ 프로세스 상태 정보1. 준비, 실행, 대기, 종료 2. 프로그램카운터 (PC) : 다음에 실행할 명령어 주소 3. CPU 레지스터 값④ 가상 메모리 정보가상 메모리와 실제 메모리 매핑 정보⑤ 스케쥴링 정보1. 우선순위 2. CPU 점유 시간 3. 프로세스가 입출력 작업을 완료할 때까지 대기해야하는 정보⑥ 자원의 타입1. CPU 점유 시간 2. 메모리 공간 3. I/O 장치📄 2. 프로세스 상태 & 상태 전이 상태 (Node) & 상태 전이 (Arrow) 1). 상태 상태설명① 생성 (new)1. "Ready" 상태로 이동하기 전의 초기화 단계 2. PCB 생성② 준비 (Rea..
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름
·
CS/OS
⏱️ 3. 프로그램을 처리하는 발전 흐름 프로세스는 활동 단위다. 운영체제로부터 시스템 자원을 할당받는 활동의 단위프로세스는 운영체제에 의해 메모리 공간과 CPU 자원을 할당 받는다.📄 1. 프로세스 처리 발전흐름 ① 다중 프로그래밍 시스템 (Multi Programming) 여러 프로세스를 메모리에 올려놓을 수 있지만 동시또는 병렬적이지는 않음.한 프로세스가 모두 실행되야 다음 프로세스가 실행된다. #1 대기시, #2 실행#1 에 I/O 작업실행시 대기상태로 가지만, 그래도 Non-Blocking I/O (파일, 네트워크통신, 마우스키보드 입출력 장치)② 시분할 처리 시스템 (Multi Tasking) 드디어 프로세스의 동시성(Concurrency) 실행 가능하고 빠른 응답성의 장점을 얻음점유시간을..
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법
·
CS/OS
⏱️ 2 OS가 메모리를 관리하는 방법 📄 1. OS 설명이미지① 전제로 일단 프로세스가 실행될때, 아무곳에나 메모리를 무작정 접근할 수 없다.② 만약 접근하게 되는 일이 생긴다면 접근을 시도하는 프로세스를 OS에서 Inturrupt를날리고 강제로 종료한다. 그 메세지는 익히 아는 segment fault (core dumped) ③ 따라서 실행되려면 프로세스가 메모리를 OS에게 요청해야 됨. OS가 ReadWrite할 수 있는 공간을 할당해준다.📄 2. Memory Fragmentation 빈 메모리가 있지만 사용할 수 없어 메모리가 낭비된다는 공통점이 있다. 단편화 때문에 새로 할당할 크기에 맞는 메모리를 찾으러 하나하나씩 탐색하는 과정으로 힙 메모리가 느린것에 한몫한다.일반적으로 스택은 높..
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙
·
CS/OS
⏱️ 1 스택과 힙 📄 1. 두 메모리간 비교 1 뭘 저장하나?, 2 속도 (접근, 생성해제)?, 3 데이터 접근법, 공유 범위?,4 최대 할당 사이즈는?, 5 메모리 관리비교Stack : 정적 메모리Heap : 동적 메모리① 저장 하는 것함수내 지역변수, 매개변수, this 매개변수 참조변수(주소값)함수/메소드 호출 정보(Stack프레임)객체 그 자체 저장(객체 멤버 변수들도) (new)② 속도 (생성과 해제 & 데이터 접근)빠르다.느리다③ 접근 방법과 공유 가능성1. LIFO 순서 2. 함수내 블럭에서만 접근 가능1. 무작위 접근 2. 프로그램간 공유가 가능하다.④ 최대 할당 사이즈1. 컴파일 타임에 사이즈 제한2. arr[]와 같은 문법3. 약 1M 혹은 500M정도 작다.1. 고정 크기가 없지만..
| 니앙팽이 - 멀티스레딩 | 0 | 하드웨어와 캐시 메모리
·
CS/OS
⏱️ 0. 하드웨어 📄 1. 프로세서(CPU) : 명령어 처리를 위한 하드웨어 1). CU (Control Unit) 프로세스 형태로 메모리에 올라간 명령어 주소들중PC, IC가 가르키는 주소의 Instruction code를 "인출, 해독"한다.명령어 실행에 필요한 "제어 신호" RAM, ALU, I/O에 보내는 장치2). ALU 연산을 수행하는 장치3). Register RAM이외에 CPU내부에 내장된 기억장치, 엑세스 속도가 가장 빠름Instruction Register (IR)프로세스 형태로 메모리에 올라간 명령어들 중 현재 수행중인 명렁어를 저장한다Program Counter (PC)6502에선 16bit 레지스터로프로세스 형태로 메모리에 올라간 명령어들 중 다음에 수행해야 하는 명렁어를 저장..
[프로그래머스 2019 KAKAO BLIND RECRUITMENT] (level2) 후보키
·
PS/알고리즘
회고1. 그냥 같은 row끼리 Concat하면 되는데 Join을 해버렸다. 정신이 어떻게 된것 같다.그래서 미친듯이 많은 재귀를 돌리고 메모리가 터졌다..2. 비트셋을 이용해 본것은 처음 3. vector> 내 원소들간 중복제거를 연구해봐야 겠다.4. 프로그래머스에 전역 변수 선언을 하는것도 한번 참고해 보자.5. 이상한 반례 : 다음 테이블의 후보키는 전부 가능한거 아닌가? 근데 막상 풀었을때, 후보키는 1개 밖에 사용 못했다.학번이름전공학년"100""ryan""music""2" #include using namespace std;vector CandiKey;int ColNum = -1;int RowNum = -1;int solution(vector> relation) { int answer = ..
[프로그래머스 2019 KAKAO BLIND RECRUITMENT] (level1) 실패율
·
PS/알고리즘
1). double 같은지 비교https://www.acmicpc.net/blog/view/37double 끼리 같은지 비교할때, abs(a - b) 이렇게 해야 한다.그런데 여기서 좀 충격인게 위 글을 보고 1e-9 (0.000000001) 의 오차를 가지게 했는데실제 실행시킬때 테케 통과가 안되는 문제가 있었다. 그래서 EPS를 1e-15 까지 더 줄이니 통과 했다.2). 풀이#include #define x first#define y secondusing namespace std;const double DOUBLE_OFFSET = 1e-15;bool comp(const pair& lhs, const pair& rhs) { if(abs(lhs.x - rhs.x) rhs.x;}vector sol..
[프로그래머스 2019 KAKAO BLIND RECRUITMENT] (level2) 오픈채팅방
·
PS/알고리즘
정말 오래간만에 알고리즘 문제를 풀어봤다.PS 실력은 옜날과 비교할때는 저점이 되었지만 C++ 언어 자체는 김포프님 언매니지드 강의 듣고 나서 이해는 더 잘된듯. #include #include #include #include #include using namespace std;// hashSet == unorderd_map 사용 // UID 와 string 매핑 // 레퍼런스 변경void Change(unordered_map &ud, const string& uid, const string& repN) { // TODO user에 있는 string을 찾아서 교체, 레퍼런스 교체 ud[uid] = repN;}// UUID & Enter/Leave// UUID & 01010// UID..