크래프톤 정글 11DAY 쓰레드와 프로세스 멀티 테스킹과 멀티 스레딩
오늘의 til 그림으로 한눈에 알아보기
1번 노트
저건 내 노트라 따로 적지 않았는데 사실 적재방식이 반대로라기보다는 메모리 주소의 방향이 거꾸로이다.
이걸 좀 더 쉽게 표현하자면 스택영역은 낮은 영역에서부터 할당 힙 영역은 높은 영역에서부터 할당
된다고 이해하면된다.
그리고 이런 식으로 할당을하는 이유는 메모리를 효율적으로 다루기 위해서이다.
2번노트
직접 그린 그림과 osi7계층 정리표이다.
osi7계층 표의 경우 지인의 ppt에서 거의 다 복붙하여 정리를 하였기 때문에, 혹시나 몰라서 가렸고(원래 지인분이 전문 배포는 원하시지 않던 거 같음) 나머지 부분은 내가 찾아가면서 정리한 것들이기 때문에 그냥 올렸다.
나는 투머치 토커이고, 아는 거 공부한 거는 약간 죄다 자랑하고싶어하는 사람이니 그런 글을 싫어하는 사람이라면 그냥 그림만 보고 넘기거나 각 toc를 보고 원하는 부분만 발췌하여 읽는 것이 정신건강에 좋을 것이다.
레퍼런스
테스크와 프로세스
우선 여기에서 말하는 테스크는 가장 작은 일의 단위라고 명시되었던 그 친구이다.
그렇다면 프로세스가 할일이라고 설명하는 책들은 뭔 소리를 하는걸까?
프로세스로 승격이 된 테스크들은 모두 언젠가는 실행이 가능하다는 가능성을 가지고 있다.
그리고 테스크가 프로세스로 올라갈 때에 해당 테스크의 상태 정보들이 저장되는데 이를 컨텍스트라고 부른다.
컨텍스트 스위칭
컨텍스트 스위칭의 주체는 o/s이다.
그렇다면 컨텍스트가 바뀐다는 것은 무엇을 의미할까
의미
컨텍스트가 변경된다는 것은 실행가능한 가장 작은 일의 단위 또는 실행흐름 변경되는 것이나 마찬가지이다.
따라서 프로세스는 이전과 동일하나 그 내부에서 진행되고 있는 작은 작업의 변화를 의미하며, 이때에 os는 우선순위 스케줄링을 바탕으로 작업을 실행한다.
유의사항:컨텍스트 스위칭 시 프로세스가 변경되지는 않는다.
프로세스의 변경은 이후에 설명할 멀티테스킹에서 이루어진다.
왜 하지
이는 여러가지 이유가 있겠지만, 성능 향상 시스템 응답률 향상등이 있다.
조금 더 딥하게 공부하고 싶은 사람이 있다면 위에 레퍼런스에 있는 컨텍스트 스위칭의 필요성에 대해 정리한 내 블로그 게시물로 돌아가서 읽어보면 될 것 같다.
프로세스
자 하나의 컨텍스트는 하나 이상의 쓰레드를 가질 수 있다.
여기에서 중요한 것은 하나 이상
이라는 키워드로 이것을 제대로 기억해야만 이후에 나올 멀티 쓰레딩 기법에 대해 쉽게 이해할 수 있다.
프로세스에는 이러한 쓰레드 이외에도 코드 데이터 힙 스택 영역이 존재한다.
힙 스택 영역
힙 영역과 스택 영역의 정의는 책에 잘 나와있고, 내가 한가지 첨언을 하자면 이 둘은 메모리의 효율성을 위해 적재되는 메모리의 주소 방향이 거꾸로이다.
멀티 테스킹과 멀티 쓰레딩
이 둘은 엄격하게 다르다...요즘들어 느끼는 것인데 cs공부를 할 때엔 통상적으로 이름이 다른데 뭔가 쎄하면 완전 다른 개념이다.
이 둘에 대해 설명하기 전에 잡고가야할 기본적인 규칙이 있는데, 1코어에는 기본적으로 1프로세스가 들어간다는 것이다.
그러나, 많은 사람들이 외국어를 공부하면서 경험해봤듯 규칙은 깨라고 있는 것이다.
하이퍼 스레딩은 바로 저런 기본 규칙을 파괴하고 1코어에 2프로세스가 들어가도록 가상적인 눈속임을 하는 것인데 이 부분은 찬찬히 알아보도록 하자.
멀티 테스킹
멀티 테스킹은 ms단위로 굉장히 꼼꼼하게 프로세스의 실행시간을 쪼개어서, 여러개의 프로세스가 동시에 실행되는 것처럼 보이게 하는 방식이다.(핀토스에서는 이런 것도 할 수 있나 두근두근)
여기에도 컨텍스트 스위칭과 유사하게 일종의 우선순위 규칙이 있으며, 이에 따라 o/s가 알아서 각 프로세스를 번갈아가며 실행해준다.
따라서 멀티테스킹을 한다라는 것은 프로세스 스위칭을 한다
라는 말과 거의 일치하는 말이다.
ipc통신
ipc통신의 정의를 다룰 것은 아니고, 멀티 테스킹은 프로세스가 나누어져 있으니 독립적인 메모리 공간을 가지고 실행되는 원리이다.
따라서 프로세스 간의 정보나 메모리 공간을 공유하기 위해서는 무언가 특별한 통신이 쓰여야하고 그것이 바로 ipc통신이다.
멀티 쓰레딩
내 til그림을 보아도 알 수 있듯 멀티 스레딩은 기본적으로 하나의 컨텍스트 정보를 가지고 있으며, 하나의 프로세스 내에 위치한다.
때문에 프로세스가 같으니 메모리 공간도 아무 작업없이 공유 가능하다.
왜하지
하나의 컨텍스트를 굳이 두개의 프로세스로 쪼개는 이유는 병렬 작업 처리를 함으로써 cpu의 자원을 최대한 활용하기 위해서이다.
한마디로 요즈음의 cpu들은 상당히 빠르고 똑똑해졌기 때문에, 여러개의 일을 하도록 굴리기 위해서 이러한 설계를 하는 것이다.
동기화 객체
그러나, 아무런 작업이 필요하지 않다는 건 아니고 하나의 프로세스이기 때문에 동일한 자원을 서로 사용하려는 문제가 생길 수 있다.
따라서 s/w계층에서 동기화 객체를 사용함으로써 이러한 문제들이 생기지 않도록 방지해준다.
하이퍼 스레딩
얘는 하나의 논리적 코어 안에 가상의 프로세서를 만들어서, 하나의 코어지만 두개의 프로세스가 실행 가능하도록 만든 인텔의 신기술이다.
즉 일종의 눈속임에 가까운 기술로, 각각의 가상공간 프로세서 안에서 각각의 프로세스가 병렬적으로 실행되는 것이 특징이다.
멀티코어
얘는 멀티 프로세싱의 일종으로 아마 4개의 그림을 완벽하게 이해했다면, 이제 프로세스와 프로세서의 차이는 따로 설명하지 않아도 피부로 느껴질 것이다.
하나의 프로세서 칩 내에 두개의 코어를 두고 이 물리적으로 존재하는 두개의 코어가 각각의 프로세스를 가지는 형태이다.
즉 프로세서 칩은 한개인데, 물리적 코어를 두개 둠으로써 하드웨어적으로 멀티프로세싱을 구현해내는 방식의 일종이다.
댓글남기기