리눅스에서는 스레드 수가 많아질수록 컨텍스트 스위칭이 더 자주 일어납니다 자세한 내용은 아래 쉬운코드 블로그에 정리해 두었어요~ 👍 easy-code-yo.tistory.com/43
@와라와라-i5p2 жыл бұрын
면접 준비하면서 보고 있는데, OS 설명 끝판왕이네요..!
@ezcd2 жыл бұрын
크으~ 칭찬 감사해요~~^^ 면접 준비도 화이팅이십니다~!!
@황종욱-p1v2 жыл бұрын
너무 잘 정리해주셔서 감사합니다 :) 쓰레드와 프로세스 공부시에 쓰레드의 컨텍스트 스위칭 비용이 저렴하다라고만 게시되어 있지 '왜'그런지에 대해 정리한 글이나 영상은 찾기 힘들었는데, 그 궁금증을 해소시켜주셔서 너무나도 감사합니다
@ezcd2 жыл бұрын
크~~ 도움드릴 수 있어서 기분 좋습니다 :) 앞으로도 알찬 영상 꾸준히 올릴거에요~ 자주 들러주세요 👍
@pur.o.2 жыл бұрын
강의 이해하기 너무 좋습니다! 이런 양질의 영상을 무료로 볼 수 있다니 ㅠㅠ 정말 감사드려요
@ezcd2 жыл бұрын
칭찬 감사합니다!! 아무쪼록 성장하시는데 이 채널이 많은 도움을 드릴 수 있으면 좋겠어요 :)
@짧은안꼬-m4h2 жыл бұрын
이해하기 너무 좋습니다 좋은영상 정말 감사합니다!!!
@ezcd2 жыл бұрын
ㅠㅠ 다행입니다!! 채널 이름값 하려고 최선을 다하고 있습니다 ㅎㅎ :) 소중한 댓글 감사합니다!!
@LeeMyeongjae2 жыл бұрын
무조건 선 좋아요 누르고 정주행 합니다 ㅋㅋ
@ezcd2 жыл бұрын
감사합니다 ㅠㅠ 정말 최고십니다!!!
@2023-c9p Жыл бұрын
7:05 에서 메모리 주소 체계가 다르다는게 잘 이해가 안가요 . 구체적으로 메모리 주소 체계라는게 무엇을 의미하나요? 주소할당방식 이런걸 말하시는건가요?
@ezcd Жыл бұрын
이건 좀 설명하면 길기 때문에 간단히 말씀드리면, 실제 물리적인 메모리가 커버할 수 있는 용량에 비해 컴퓨터 상에서 실행되는 프로세스들이 사용하는 메모리 총량은 더 많기 때문에 그 물리적인 메모리 용량의 한계를 극복하기 위해 나온 개념이 바로 virtual memory입니다 모든 프로세스는 자신 만의 virtual memory 영역을 가지는데, 예를 들어 프로세스 A와 프로세스 B 모두 각각 가상(virtual) memory 주소 0에서 주소 10000000까지의 범위를 가지지만, 실제 메모리 상에서는 서로 다른 위치에 저장이 됩니다 예를 들어, 프로세스 A의 가상 메모리 주소 100번에 위치한 데이터와 프로세스 B의 가상 메모리 주소 100번에 위치한 데이터는 다릅니다. 가상 메모리 주소는 둘 다 동일하게 100번이라도 이 주소 100번이 실제 메모리 상에서 맵핑되는 위치는 다르기 때문에 그렇습니다 보다 더 자세한 내용은 가상 메모리 공부를 하시면 이해 되실 것 같아요
@ohtaeg Жыл бұрын
진짜 명강의
@ezcd Жыл бұрын
감사함다~!! :)
@lightenchant7323 Жыл бұрын
진짜 쉽게 설명하셧다!
@ezcdАй бұрын
답변이 늦어 죄송합니다 ㅠㅠ 극찬 감사합니다!!!
@dolggul-p2b Жыл бұрын
좋은 강의 감사드립니다
@ezcdАй бұрын
답변이 많이 늦었습니다 ㅠㅠ 댓글 감사해요!!
@정의엽-u2i8 ай бұрын
정말정말 감사합니다~
@ezcdАй бұрын
제가 답변이 늦었어요 ㅠㅠ 댓글 정말정말 감사합니다!!
@린가드러버 Жыл бұрын
영상 너무 잘 봤습니다! 영상을 보나보니 궁금증이 생겼는데요 리눅스 환경에서 사용자 모드에있는 프로세스에서 시스템 콜을 사용하게 된다면 무조건 컨텍스트 스위칭이 일어날까요? 컨텐스트 스위칭과 사용자, 커널 모드의 개념이 무언가 섞여서... 혼란스럽네요. 커널 모드로 들어가게 되니까 컨탠스트 스위칭이 발생한다고 생각은 하는데 정확히 이유를 잘 모르겠네요. 어떤 방향으로 공부를 하거나 찾아봐야할까요? 항상 좋은 영상 감사합니다!
@ezcd Жыл бұрын
컨텍스트 스위칭의 범위를 어디까지 보는지에 따라 다를 것 같아요 만약 시스템콜을 호출해서 유저 모드에서 커널 모드로 바뀌고 커널 코드가 실행되는 것까지도 컨텍스트 스위칭의 범위로 간주한다면 시스템콜을 호출할 때마다 컨텍스트 스위칭이 일어난다고 볼 수 있겠습니다 보통 저같은 경우에는 시스템콜을 통해 커널 모드로 전환돼서 커널 코드가 실행되는 것 자체는 컨텍스트 스위칭이라고 보진 않고요, 실제로 다른 스레드나 프로세스로 컨텍스트가 바뀔 때를 컨텍스트 스위칭으로 봅니다 그리고 이 경우에는 시스템콜을 사용한다고 해서 항상 컨텍스트 스위칭이 발생한다고 볼 수는 없고요 * 이 개념은 공부하기가 약간 까다롭긴 합니다~ 사람들이 개념을 정의하는 방식이 다들 조금씩 다르다 보니 그렇습니다 조금 더 구체적으로 검색해 보고 싶으시다면 context switch, mode switch, system call 등을 적절히 키워드로 잡고 검색해 보시면 어떨까 싶어요
@린가드러버 Жыл бұрын
@@ezcd 아 감사합니다. 생각해보니 정확히 mode switching이 어떻게 이루어지는지 몰라서 생긴 질문같았네요!! 정말 감사드립니다!
@친환경사과 Жыл бұрын
감사합니다. Context Switching 맛있게 먹었습니다. 😀
@ezcd Жыл бұрын
감사합니다 그렇다면 저는 만족합니다 :)
@Geouttttt3 жыл бұрын
프로세스 스위칭에서 p2가 p1이랑 연결되어 있는 상태를 차단하기 위해 p2를 비워야 된다는 말씀이신가요?? 백엔드 개발자로서 알고리즘 타고 들어왔는데 생소하긴하지만 익숙한 용어들이 있어서 이해해보고 갑니다! 설명 잘하시네요
@ezcd3 жыл бұрын
반갑습니다 :) 우선 칭찬 감사드려요!! 비워야 된다는 질문이 TLB를 비우거나 캐시를 비우는 것에 관한 질문이지요? 이건 서로 다른 프로세스에 속한 스레드가 교체될 때의 내용인데요, 우선 스레드는 반드시 한 프로세스에 소속이 되고, 프로세스 끼리는 서로 구별된 메모리 영역을 할당 받는다는 배경지식을 이해하는게 중요합니다. 이런 배경 하에, 서로 다른 프로세스에 속한 스레드끼리 스위칭이 발생하면 당연히 CPU에서는 참조해야할 메모리 영역이 달라져야 합니다. 만약 교체되기 이전의 스레드의 메모리 영역을 여전히 참조하도록 놔두게 되면, 교체되어 실행되는 새로운 스레드는 다른 프로세스 소속이기 때문에 당연히 자신이 속한 메모리 영역을 참조해야함에도 이전의 스레드가 속한 프로세스의 메모리 영역을 참조하게 돼서 대참사가 일어나게 되겠죠. 그런 의미에서 서로 다른 프로세스에 속한 스레드의 스위칭일 때는 TBL이라는 가상 메모리와 물리적 메모리의 매핑 정보를 담고있는 캐시를 비워줘야하고, 마찬가지로 CPU에 있는 cache도 이전 스레드가 자주 쓰던 데이터들을 들고 있었는데, 스위칭이 발생하면 이걸 들고 있을 필요가 없기 때문에 (일부 cpu 아키텍쳐에서는) cache까지도 비워주기도 합니다. 적절한 답변이 됐을지 모르겠네요~
@세승-v4s2 жыл бұрын
강의 잘 듣고 있습니다~ 강의 듣던 중 궁금한 점이 생겨 댓글 남깁니다. 프로세스간의 컨텍스트 스위칭이나, 한 프로세스 내의 다른 스레드들 간의 컨텍스트 스위칭이 발생하는 경우가 다른 하드웨어와의 입출력과 관련된 처리를 할 때 발생할 수 있다고 설명을 해주셨었는데, 그럼 입출력 관련 처리동안에는 전혀 cpu를 사용하지 않는건가요? 제가 생각하기엔 입출력하는 동안에도 read, write를 위해 cpu를 사용해야할 것 같은 느낌이 들어서요.
@ezcd2 жыл бұрын
늘 애청해 주셔서 감사합니다 :) 물론 말씀하신 것처럼 read/write를 할 때 CPU가 사용되는 부분이 있습니다 여기서 컨텍스트 스위칭이 발생하는 이유는, I/O(입출력) 작업은 입출력 장치와 연관이 있는 작업인데, 입출력 장치에서 작업 처리를 하는 동안에는 CPU는 일 없이 기다리고 있어야 하기 때문에 그렇습니다 기다리는 동안 CPU를 점유하고 있으면 CPU 낭비가 되기 때문에 그렇게 하지 않고 컨텍스트 스위칭이 돼서 다른 프로세스/스레드가 CPU를 사용할 수 있도록 하는거죠 백엔드를 예로 들면, 백엔드에서 가장 많이 사용하는 I/O는 네트워크 I/O입니다 백엔드 서버에서 다른 서버에 데이터를 보내거나 혹은 요청했을 때 그 데이터가 네트워크 공간을 이동하는 동안에는, 혹은 그 데이터가 다른 서버에서 처리되는 동안에는, 백엔드 서버의 CPU가 할 수 있는 일이 아무것도 없죠 이런 상태에서도 네트워크 I/O 작업을 요청한 프로세스/스레드가 CPU를 점유하고 있다면 CPU 낭비가 발생하기 때문에 그렇게 하지 않고 컨텍스트 스위칭을 해줘서 다른 기다리고 있는 프로세스/스레드가 CPU를 사용할 수 있도록 해주는 거라고 이해해 주시면 될 것 같아요
@카라멜땅콩-p2p2 жыл бұрын
잘들었습니다 감사합니다.
@ezcd2 жыл бұрын
소중한 댓글 감사합니다 :)
@woosangjeon56972 жыл бұрын
안녕하세요 정주행 하는중에 궁금증이생겼습니다 DB를 예로 들어서질문하겠습니다 데이터 조회시(select) 데이터가 메모리에없다면 디스크에서 데이터를 읽어오는 I/O 작업이 이루어질텐데, 디스크 I/O 작업은 메모리보다 상대적으로 시간이 오래 걸립니다 그렇다면 이때 디스크 I/O 작업을 수행하는 프로세스/스레드는 어떻게작동하는 건가요? 프로세스/스레드는 디스크 I/O 작업이 끝날때까지 Waiting 상태인가요? 아니면 컨택스트 스위칭이 이루어저서 다른 프로세스/스레드 작업을 수행하나요? 전자는 너무 비효율적이기 때문에 후자예시로 작동을할것같은데 궁금하네요. 답변해주시면 감사합니다 새해복맣이 받으세요
@ezcd2 жыл бұрын
와우 정주행 중이시군요 멋지십니다!! 답변 드리기에 앞서서 우선 새해 복 많이 받으세요 😊 (DB는 구현 방법이 여러 방법이 있겠지만) 예를 들어 DB 서버로 요청이 올 때 마다 각각의 요청을 스레드가 하나씩 전담해서 처리한다고 가정해 보면, 그리고 I/O가 block I/O로 동작한다면, 요청을 처리하는 각 스레드에서 I/O 작업을 하기 시작하면 해당 스레드 상태는 waiting 상태로 바뀌게 되고, 그러면 CPU에서는 (실제로는 CPU 코어겠죠. 요즘은 멀티코어니까요) context switching이 일어나서 다른 스레드가 CPU에서 실행되는 형태로 동작할 것 같습니다~
@woosangjeon56972 жыл бұрын
@@ezcd DB 마다 작동하는 방식이 내부적으로 조금씩 다릅니다. 오라클 DBMS 는 멀티 프로세스 이고, MySQL 은 멀티스레드 방식으로 작동 합니다. 경험상 AP 를 운영함에 있어서 DB 에서 데이터를 조회하는 시간이 길어진다면(배치작업 제외) 크리티컬한 문제가 될수 있습니다. DB 성능이 문제가 있을때 대부분은 디스크 I/O 가 원인일때가 많았습니다. 그래서 디스크 I/O 작업을 수행하는 CPU(core) 가 운영체제적으로 어떻게 작동하는지 궁금했습니다. 상식적으로 waiting 상태에 빠져 아무작업도 하지 못한다면 너무 비효율적으로 자원관리를 하는거라고 예상하면서 context switching 일어날거라 생각했습니다. 시원한 답변감사합니다. 오랜 궁금증이 답변으로 해결됬습니다. 운영체제 강의는 기초를 다지는데 많은 도움이 됐습니다. 감사합니다.
@ezcd2 жыл бұрын
@@woosangjeon5697 크 뭔가 도움을 드릴 수 있어서 감사하고 뿌듯하네요 :) 항상 영상 애청해 주셔서 정말 정말 감사합니다!! 최고십니다!! 👍
@김은서-c5x2 жыл бұрын
다음 주에 면접이 있어서 정주행하고 있는데 정말 너무 좋아요~o(^▽^)o 앞으로도 좋은 영상 많이 만들어주세요!!! 정말 감사합니다ㅎㅎㅎ👍👍👍
@ezcd2 жыл бұрын
우아~~ 정주행 최고십니다!!👍👍👍 다음 주 면접에 좋은 결과 있을거에요! 파이팅!! 응원합니다!! 저도 계속해서 좋은 영상으로 인사드릴게요 :)
네 맞습니다 ~! 서로 다른 프로세스 간의 컨텍스트 스위칭은 메모리 주소 체계가 다르기 때문에 이전 프로세스의 메모리와 관련된 정보를 비워줘야 합니다 하지만 같은 프로세스(편의상 부모 프로세스라고 하겠습니다)에 속하는 스레드 간의 컨텍스트 스위칭은 (같은 부모 프로세스의 메모리 공간을 공유하기 때문에) 메모리와 관련된 것은 그대로 두고 나머지(가령 레지스터)만 정리해주면 됩니다 클래스의 인스턴스의 경우에 자바로 치면 예를 들어 Car myCar = new Car(); 이런 식으로 클래스의 인스턴스를 만드는데요, 이 때 new Car()를 통해 생성되는 instance 자체는 heap에 할당이 되구요, myCar처럼 instance를 참조하는 참조 변수는, 만약 메서드 내에서 선언됐다면, 이 참조 변수 자체는 stack에 할당됩니다 오늘도 열정적인 모습 정말 최고십니다 :)
@갈가마구2 жыл бұрын
@@ezcd 넵 클레스,인스턴스는 힙에 둘을 참조하는 변수나 메서드 스텍에... 힙에 할당 돤다는거는 인스턴스간에 공유가 가능 할거 같아서 질문 드렸습니다 이걸로 static 이 구현 될까요? 모르는게 많아 질문이 맣습니다 감사합니다
@ezcd2 жыл бұрын
오 맞습니다 멀티스레딩 환경에서는 스레드 간의 객체 공유가 가능합니다~ 그래서 이 영상을 찍게 된 것이죠 (kzbin.info/www/bejne/rKGTeJahr5itbJY) static 변수는 또 다른 얘기인데,, 자바로 한정해서 설명드리면 자바는 버전이 8 이전에는 permGen이라고 불리는 공간에 저장됐었고 8버전 이후부터는 heap 영역에 저장됩니다
@갈가마구2 жыл бұрын
캐시오염. - 캐시는 다음에 쓸거라고 예상을 하고 미리 가져다 놓은 데이터들이기 때문에 컨텍스트 스위칭을 하면 캐시에 있는 데이터는 의미가 없는 데이터가 되버리네요. 캐시메모리가 넉넉 하다면 해결될 문제내요 ^^ 고맙습니다.
@더덕-m2g2 жыл бұрын
명 강 의
@ezcd2 жыл бұрын
명댓글이 명강의를 만들죠 👍
@igonan5441 Жыл бұрын
정말 정리가 깔끔해서 이해하기가 수월하네요. 명강의 감사합니다. 궁금한게 ARM 에서 ASID (Address Space ID) 라는 개념이 있는데 이를 통해 TLB 내에서 different application 이 같이 공존할 수 있다고 합니다. 뭔가 OS 가 특정 process 에 ASID 를 할당해서 여러개의 process 가 context switching 이 발생해도 TLB flush 가 일어나지 않을 수 있도록 한 것으로 이해했는데요. 제가 제대로 이해한게 맞을까요? 실제로 제가 사용중인 Cortex-A55 는 single thread core 라서 이런 ASID 같은 게 없다면 context switching 에 사용되는 시간이 너무 낭비일 것 같습니다..
@ezcd Жыл бұрын
우선 영상을 시청해 주시고 유익하게 봐주셔서 감사합니다 :) 두괄식으로 우선 답변을 드리자면, 저는 ASID에 대한 개념을 잘 모르고 있었고요, 인텔 x64 아키텍처에서 사용되는 PCID(process context ID) 개념을 대충은 알고 있습니다. 잠시 구글링을 해보니 이 두 개의 개념이 유사한 것 같네요~ 아마도 이해하고 계신 것이 맞을 것 같습니다 PCID 관해서 조금 더 자세히 설명드리면, 2018년 즘 meltdown 보안 이슈가 터지면서 이 문제를 해결하려고 하나의 프로세스가 유저 모드일 때와 커널 모드일 때 각각의 모드에서 page table을 가질 수 있도록 변경을 하게 됩니다 (원래는 프로세스 하나 당 page table 하나 였는데, 이제 두 개가 된 거죠) 그리고 이제 보안 이슈를 해결하기 위해서 system call로 mode switch가 발생할 때마다 page table을 바꿔줘야 했고 그래서 TLB flush를 해야 했는데, 그것 때문에 성능 하락 문제가 발생하니까 이걸 해결하려고 PCID가 더 주목을 받게 됐습니다. (PCID의 경우 2010년 부터인가 존재했던 것 같고요) 왜냐하면 PCID를 사용하면 (정확히는 모르지만) process context 마다 ID를 부여할 수 있어서, 굳이 TLB flush를 하지 않아도 되기 때문이죠 그런데 위키백과에 따르면 PCID를 쓴다고 해도 시스템콜이 빈번하게 일어나거나 인터럽트가 빈번하게 일어나면 성능에 꽤 안좋은 영향을 준다고 합니다 ( en.wikipedia.org/wiki/Kernel_page-table_isolation#Implementation ) 사용하는 Cortex-A55에 대해서는 ASID를 지원하는지, 그리고 OS 레벨에서도 이게 turn on 상태인지, 그리고 실제로 그렇게 했을 때 드라미틱하게 성능에 영향을 주는지는 별도의 리서치가 필요할 것 같아요