목록CS (45)
bdfgdfg
공유자원 멀티스레드 환경에서 스레드는 프로세스의 데이터,힙영역을 공유하게 된다. 여기서 여러 문제점이 발생할 가능성이 생기는데. 예로들어 밑의 코드와 같은 상황. int num = 0; void Inc() { for (int i = 0; i < 100'0000; ++i) num++; } void Des() { for (int i = 0; i < 100'0000; ++i) num--; } int main() { std::thread t1(Inc); std::thread t2(Des); t1.join(); t2.join(); std::cout t1쓰레드에서 num++를 진행하고 결과를 메인 메모리에 반영하기전에 t2쓰레드로 컨텍스트 스위칭이 일어나(혹은 동시실행) num--의 결과를 저장. 다시 t1쓰레드로..
프로그램은 디스크에 저장이 되어있고, 더블클릭을 하여 프로그램이 운영체제의 자원을 할당받아 메모리에 올라오며 실행되는 상태가 프로세스. 이러한 프로세스는 우리 컴퓨터의 메모리에 하나만 올라와있는것이 아니고 여러개가 존재하기에, CPU는 이 모든 프로세스를 돌아가며 실행시켜야 한다. 그 일을 담당하는 것이 바로 스케줄러. 선점형 OS와 비선점형 OS 프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라 선점형 OS와 비선점형 OS를 구분한다. 먼저 비선점형 OS는 현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다. 새로 등장했거나 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행중인 프로세스가 CPU 타임 슬라이스를 다 사용했거나 I/O작업으로 ..
프로세스 - 운영체제에서 프로세스는 하나의 작업 단위. - 우리의 디스크에 저장된 프로그램(exe)을 사용자가 더블클릭하여 실행하면 그 프로그램은 프로세스가 된다. -> 프로그램은 하드디스크같은 저장장치에 보관된다. -> 프로그램은 저장장치에 저장되어 있는 정적인 상태이며 프로세스는 실행을 위해 메모리에 올라온 동적인 상태. - 프로세스를 구성하는 요소 코드영역,데이터영역,힙영역,스택영역 기계어로 번역된 프로그램을 실행하면 프로세스가 되고 프로세스의 구성요소는 위와 같다. 코드 영역 : 실행파일을 구성하는 명령어들이 올라가는 메모리 영역. (즉 우리의 코드가 기계어로 번역된 곳이 올라가는 곳) 데이터 영역 : 전역변수나 static으로 선언한 정적변수들이 올라가는 곳. 프로그램의 실행과 동시에 올라간다...
폰노이만 구조 - 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. -> 폰노이만 구조란 cpu,메모리,입출력장치,저장창치가 버스로 연결되어 있는 구조. -> 폰노이만 구조의 가장 중요한 특징은 저장된 프로그램이 메모리에 올라와 순차적으로 실행된다는 개념. CPU의 구성과 동작 - CPU는 명령어를 해석하여 실행하는 장치. - CPU는 산술논리 연산장치(ALU), 제어장치(Control Unit), 레지스터(Register)로 구성. -> 산술논리 연산장치는 데이터의 덧셈,뺄셈,곱셈,나눗셈과 같은 산술 연산과 AND,OR등과 같은 논리 연산을 수행한다. -> 제어장치는 CPU에서 처리하는 작업을 제어한다. (명령어 해석등) -> 레지스터는 CPU내에 데이터를 임시로 보관하는 곳을 레지스터. (CPU내부에..