스레드란?
CS2024. 9. 18. 22:37스레드란?

스레드(thread)란?'실행의 단위, 프로세스를 구성하는 실행 흐름의 단위를 뜻한다.' 실행의 흐름 단위가 1개라면 단을 프로세스, 실행 흐름의 단위가 여러개라면 멀티 스레드 프로세스이다.실행에 필요한 최소한의 정보만(프로그램 카운터, 레지스터, 스택)을 유지한체 프로세스의 자원을 공유하여 실행한다. 스레드가 왜 필요할까?윈도우 OS 기준 멀티 프로세스 기반 OS이다.즉 여러개의 프로세스를 실행할 수 있는데 여러개의 프로세스를 실행할 때 '컨텍스트 스위칭'이 발생한다.컨텍스트 스위칭(CS라 하겠다)을 간단하게 말하면 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 뜻한다.이 CS는 아무리 못해도 1초에 수십번 발생하기 때문에 성능저하의 원인이 된다.(멀티 프로세스 기반 OS의 최대 단점중 한가지..

Stack Frame과 함수 호출 규약(__stdcall)
CS2024. 4. 28. 22:36Stack Frame과 함수 호출 규약(__stdcall)

스택 프레임이란?쓰레드의 실행 문맥(Context)를 제공하는 스택의 추상화입니다.다른 말로는 함수의 호출 정보를 저장하는 자료구조이고, 이 자료구조는 스택형태로 되어 있습니다.스택 프레임에는 함수로 전달되는 매개 변수(인수)와 지역변수, 함수 호출을 마치면 돌아올 복귀 할 주소 등의 정보들이 들어갑니다. 스택프레임 형성 과정이런식으로 호출을 하는 경우 대~충 아래처럼 스택이 쌓입니다.sp(stack pointer)이라는 레지스터는 변수가 하나씩 할당될 때마다 증가하는데 증가하면서 다음 변수가 할당될 메모리 위치를 가르키게 됩니다.함수가 호출이 종료되고 나서 돌아갈 곳을 기억하기 위해서 fp(frame pointer) 라는 레지스터를 사용을 합니다.즉, sp가 돌아갈 위치를 fp가 기억을 해주는 방식입니..

[CS] 가상 메모리와 페이징
CS2023. 8. 15. 21:55[CS] 가상 메모리와 페이징

이번글은 페이징에 대한 글입니다. 이전에 https://cjbworld.tistory.com/36 스와핑에 대해서 설명하던 도중 '외부 단편화'를 해결하는 방법으로 잠깐 소개했었는데요, 이번글은 외부 단편화를 해결하기도 하고 메모리 보다 큰 프로세스를 '적재' 할 때에도 사용되는 '가상 메모리'에 대한 정리글입니다! 가상 메모리란? 가상 메모리는 실행하고자 하는 프로세스의 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 도 큰 프로세스를 실행할 수 있게하는 기술 입니다. 이런 가상 메모리를 관리하는 기법 중에는 크게 '페이징'과 '세그멘테이션'이 있지만 페이징에 대해 알아보도록 하겠습니다. 아무튼 가상 메모리를 관리하는 기법인 '페이징'을 사용하는 외부 단편화 문제와 물리 메모리의 크기보다 더 큰 프..

[CS] 스와핑(Swapping)
CS2023. 8. 9. 19:19[CS] 스와핑(Swapping)

이번글은 주기억 장치인 메모리에 프로세스를 연속적으로 공간을 할당하는 방식인 "연속 메모리 할당"을 할경우 고려해야할 사항중 "스와핑"이라는 부분에 대해서 알아보도록 하겠습니다. 스와핑이란? 메모리에 적재된 프로세스들 중에서는 현재 실행중인 프로세스가 있을 수 있고 실행되지 않는 프로세스들이 있을 수 있습니다. 실행되지 않는 것의 예로는 입출력 요구로 대기상태에 빠진 프로세스들이라던지 아니면 오랫동안 사용되지 않은 프로세스들 등등이 여기에 포함됩니다. 이러한 실행되지 않는 프로세스들을 임시로 보조기억장치 일부 영역을 "쫒아내고" 그렇게 해서 생긴 "빈 공간"에 또 다른 프로세스를 적재하여 실행하는 방식을 "스와핑"이라고 합니다. 쫒겨나는 보조기억장치의 일부 영역을 "스왑 영역(swap space)"이라고..

[CS] 논리주소와 물리주소
CS2023. 8. 7. 22:13[CS] 논리주소와 물리주소

[06-2] 이번글은 메모리의 논리주소와 물리주소에 대한글입니다. 먼저 메모리란 무엇인지에 대해서 알아보도록 하겠습니다! 주기억 장치의 종류로 크게 RAM, ROM가 있습니다. 이중에서도 "메모리"라는 용어는 보통 RAM을 가르키는 단어입니다. 그래서 RAM(메모리)에 대해서 살펴보도록 하겠습니다!!ㅎㅎ 참고로 ROM에 대한 부분은 https://information-factory.tistory.com/270 RAM(램)과 ROM(롬) 차이점 쉽게 이해하기! RAM 이란? ROM 이란? 무엇일까? RAM은 우리가 흔하게 보는 부품입니다. 바로 삼성전자와 SK하이닉스에서 세계에서 제일 잘 만드는 부품으로 "초록색의 긴 막대기 같은 부품"입니다. RAM의 약어는 Random information-factor..

[CS] Context Switching(문맥 교환)
CS2023. 8. 5. 20:41[CS] Context Switching(문맥 교환)

이번글은 프로세스와 스레드에 대해 알아보도록 하겠습니다. CPU와 코어 그전에! CPU를 잠깐 다시살펴보면 "명령어를 실행하는 부품"을 CPU로 설명을 많이 드렸었는데 현대의 CPU는 "명령어를 실행하는 부품"들로 이루어진 부품입니다. 이 명령어를 실행하는 부품을 "코어"라고합니다. 제 CPU의 성능은 이렇습니다. 클럭이 3.35GHz 정도이고 코어가 8개, 논리 프로세서가 16으로 잡히네요... 코어안에는 필수레지스터들(프로그램 카운터)과 ALU L!, L2 캐시 등등 많이 들어있을 텐데 이것들이 총 8개 있다는 말입니다. 그리고 논리 프로세서는 16개로 코어 하나당 하드웨어적 스레드가 2개씩 있다고 보면 되겠습니다. 보통 "스레드"라고 하면은 프로세스 상의 스레드를 떠올리시기 쉬운데 스레드는 뭐냐? ..

[CS] Mutex Lock과 Semaphore
CS2023. 8. 2. 19:58[CS] Mutex Lock과 Semaphore

#include #include using namespace std; int sharedResouce = 0; void func() { for (int i = 0; i 읽어들인 잔액에 5만원을 더한다 => 더한 값을 저장한다. 이렇게 볼 수 있습니다. 그런데 프로세스A가 먼저 실행되어 10만원이 있는 계좌 잔액을 읽은다음에 읽어들인 잔액에 2만원을 더했습니다. 그리고 더한 값을 저장하면 되는데 저장하기 전 프로세스 B가 현재 계좌 잔액을 읽어버리고(프로세스A가 아직 더한값을 저장 하지 않았기 때문에) 나서 현재 10만원 + 5만원을 진행하였습니다. 그리고 프로세스 A는 12만원을 저장하고 프로세스 B는 자신이 한 일을 하기위해 15만원을 계좌에 저장했습니다. 그러면 원래는 17만원이 저장되어야 하지만 1..

[CS] ALU, Control Unit, 레지스터 주소 지정방식
CS2023. 7. 29. 18:09[CS] ALU, Control Unit, 레지스터 주소 지정방식

먼저 컴퓨터의 4가지 핵심 부품인 CPU, 메모리, 보조기억장치, 입출력 장치는 메인보드에 연결되어 버스중에서 시스템버스를 통해서 필요한 데이터들을 주고 받습니다. 이중에서도 이번글은 CPU의 ALU, 제어장치(Control Unit)의 동작방식을 알아보고 핵심 레지스터들의 종류와 주소 지정방식의 큰개념들을 살펴보도록 하겠습니다. 먼저 메모리의 경우 현재 실행중인 프로그램의 명령어, 데이터를 저장합니다. “주소”단위로 나누어서 저장합니다. CPU의 경우 메모리에 저장된 명령어를 읽고 명령어를 해석하고 명령어를 실행하는 부품입니다. 이 부품은 ALU, 레지스터, 제어장치로 구성되어 있습니다. 이 세가지의 핵심역할은 ALU의 경우 계산, 레지스터는 임시 저장장치 역할, 제어장치는 제어신호를 보내고 → 명령어..

image