'CPU가 스레드를 수행하고 있어'를 조금 더 자세히...CPU 0번 코어가 Thread를 수행하고 있어...로 하시면 더 자연스러울 것 같습니다. 그리고 CPU들이 대부분 하이퍼 스레딩을 지원합니다. 즉, 한 코어에서 2개 스레드를 동시에 처리합니다. 이 때문에 코어가 8개인 CPU라고 하더라도 프로세서는 16개가 있는 것으로 인식됩니다.
답은 간단합니다. 동시에 8개의 스레드를 처리할 수 있다면 나머지 2692개는 적어도 '대기' 상태 입니다. 그리고 모든 스레드가 항상 Running 상태는 아닙니다. Event를 Wait하는 상태일 수도 있고 Sleep 상태일 수도 있지요. 이 경우 사실상 CPU를 사용하지 않습니다.
강의 감사히들었습니다. 궁금한 점이 있는데요, 쿼드코어면 물리적으로 코어가 4개인 것은 이해했는데요. 논리적 프로세서가 x2가 되는 것은 물리적으로 하나의 코어가 2 등분 되어있는건가요? 아니면 페이징 기법같은 것을 통해 S/W적으로 작동이 2등분 되도록 되어있는건가요?
물리적인 개별 Core가 두 Thread의 명령을 한 번에 처리합니다. 이 때문에 코어가 4개라고 해도 작업관리자에서는 8개가 있는 것처럼 보입니다. 이는 하드웨어적 지원 때문에 가능한 것인데 '하이퍼스레딩'에 대해서 찾아보시면 자세한 정보와 원리를 알 수 있습니다. 감사합니다.
@@nullnull_not_eq_null 앞으로 프로그래밍이 사회에서 공기같은 존재가 될 것 같다는 생각에 개발자가 되고 싶지만, 제가 개발자로서 먹고 살 수 있을 까 하는 마음에 가지고 있는 두가지 걱정이 있습니다. 1. 프로그래머는 평생 공부해야 먹고 살 수 있다는 이야기 ->어차피 어느 직업을 택하든 평생 배워야 한다는 점은 그렇게 다르지 않을 것 같다는 생각이 들어서 크게 마음 쓰이진 않습니다. 2. 프로그래머에게 가장 중요한 기량으로 보이는 '알고리즘'이 나에게 너무 벅차보인다. ->알고리즘을 강조하는 주변분들이 많아서 최근에 '프로그래밍 대회에서 배우는 알고리즘 문제해결전략'이라는 책을 사서 한번 훑어보았는데 제가 자신없는 수학적인 내용이 많고 내용이 정말 어려워서 내가 이걸 감당 할 수있을까 조금 두렵다는 생각이 듭니다. 길게 썼지만 한마디로 '앞으로 프로그래머 수요가 많을 것 같긴 하지만 1000명의 프로그래머중 정말 실력있는 10명 정도의 프로그래머가 대부분의 일을 다 할 것 같은데 내가 그 10명에 낄 수 있을까?' 하는 생각 때문에 고민이 됩니다. 지금은 사실 저 너머에 있는 공부할 거리들보다는 바로 앞에 있는 공부에 집중하고 있습니다.
알고리즘...중요합니다. 그래서 많은 분들이 알고리즘 대회준비도 해보고 문제도 풀고 그러고 계시죠. 그런데 저는 이게 마치 SKY대 가지고 대치동 학원다니는 것 같은 생각이 듭니다. 좋은 프로그래머가 되려면, 최고가 되려면 알고리즘과 수학기 중요한 것은 맞습니다. 그러나 그것은 일부에 지나지 않습니다. 알고리즘 중요합니다만 기본적인 프로그래밍 기술을 익히는 것도 매우 중요합니다. 그리고 실력있는 10명이 되지 못한다 해서 크게 문제가 되지도 않습니다. ^^ 한 번 도전해보시죠!! 건투를 빕니다!!
안녕하세요. 그러면 프로그램이 처음 시작될때(exe 더블클릭) 그 프로그램의 소스코드는 보조기억장치에서 주기억장치로 바로 로드되는 것이 아니라 먼저 가상 메모리에 로드되고 필요할 때마다 보조기억장치에서 주기억장치로 옮겨지는건가요..? 또 가상메모리도 결국에 저장이 되어야 하는데 그러면 가상메모리는 어디에 저장되는지 모르겠네요.
프로그램이 시작되어 프로세스가 되면 운영체제가 가상메모리를 부여합니다. 그리고 그 가상메모리 공간은 RAM + HDD로 이루어져 있다고 생각하면 됩니다. 그리고 소스코드가 아니라 번역된 기계어 코드가 가상메모리에 저장되는데 이 가상메모리 공간을 따라면 RAM이 나옵니다. 결국 RAM(주기억장치)에 기계어를 저장한 것이지요. 가상 메모리는 추상화된 형식입니다. 열공하세요~~~! ^^
강의 정말 감사하게 생각 하면서 보고 있습니다. 강의 중에 좀 헷갈려서 질문 드립니다. 프로세스의 메모리가 램이 아닌 하드디스크에 배정 되면 하드디스크도 램과 같이 컴퓨터를 종료하거나 프로세스가 종료되면 하드에 남지 않게 되는 건가요? 그리고 별개의 질문이지만 모든 상용 os들에서는 deadlock이 발생하기도 하나요? 혹시 만약 발생한다면 우리가 사용하는데 어떤 장애가 될 정도가 아니라서 우리가 못 느끼는 것인가요? 그리고 만약 발생하더라도 그에 대한 처리 방식이 있는 것이겠죠?
말씀하신 부분은 스왑 영역인데...그 부분은 OS가 알아서 지웁니다. 그러니 결과적으로 사라지는 것이죠. 그리고 데드락은 논리오류입니다. 운영체제 자체가 데드락이 나올 수 있겠지만 흔한 경우는 아닙니다. 무엇보다 회피할 수 있도록 구조화 되어 있다라고 말씀드릴 수 있겠습니다. 이 역시 대응 알고리즘이 있습니다. ^^
안녕하세요! 강의 잘 보고 있습니다. 항상 감사합니다! 강의를 보다가 궁금한 게 생겨서 댓글로 여쭤봅니다. CPU가 연산을 한다고 하셨는데, 그 연산 안에는 MS Word 를 사용하면서 거기에 글자를 타이핑하는 것도 포함되는 건가요? 결국에는 CPU가 연산을 한다는 얘기는 현재 프로그램을 실시간으로 사용하고 있는 중이라고 이해해도 되는 것인지 궁금합니다.
몇 개월 전부터 철학자의 식사 문제나 서브넷 마스킹 등의 네트워크 문제로 이 채널의 영상을 찾아 봤습니다. 항상 채널주님이 말씀하셨는데, 컴퓨터는 software, hardware 로 이루어져 있고, 특히 software는 user, kernel 모드로 이루어져 있다로 시작하며 꼭 넓고 얕게 배우는 컴퓨터 구조... 강의를 들어라! 라고 하시는 말씀을 귀에 못이 박히도록 들었죠. 그때마다 아직 저에게 필요한 부분이 아니라 영상을 기대하며 미루고 있었는데 이번에 도커를 공부하다 이제 프로세스와 네트워크 그리고 컴퓨터 구조 등에 대해 더 많은 정보를 알아야 할 시기가 와서 보게 되었습니다. 기대한 만큼 너무 재미있고, 딱 가려운 곳을 긁어주셨네요! ** 요약 ** 1. 운영체제는 접근 제어, 자원 관리, 스케줄링 등의 일을 하며 이때 각각의 프로세스는 독립적인 메모리 영역을 갖는다. 그러나 하나의 프로세스에는 여러 스레드가 존재할 수 있고, 스레드란 프로그램의 흐름이자 연산의 흐름이기 때문에 서로 자원을 공유할 수 있고, 이때 공유 자원 문제가 생길 수 있다. 2. 가상 메모리는 메모리 자원을 효율적으로 사용하기 위한 체제이고, 주기억장치 RAM, 그리고 HDD를 논리적으로 추상화한 것이다. 기존에 사용하던 프로세스가 RAM 의 자원을 사용 중이었는데 새로운 프로세스를 사용하려고 시도했고, 기존의 것은 우선 순위가 줄어 더이상 많은 연산이 필요 없을 때 프로세스가 사용하던 메모리를 RAM에서 HDD로 옮기고(Page out, 또는 Swap out), 새로운 프로세스가 RAM을 할당 받는다. 제한된 메모리 자원이 있지만 여러 프로세스를 실행 가능한 이유가 바로 이 이유 때문이다. 그래서 실행 중인 메모리를 따라가면 RAM 인줄 알았던 메모리가 HDD 등의 보조기억장치일 수 있다. 이번 영상에서 제가 갖고 싶은 부분은 이렇게 두 개가 있는 것 같군요. 좋은 영상 감사합니다~~
이제 마지막강만 남겨두고 있는데 너무 쉽게 설명해주셔서 감사드립니다
열공하셨군요. 늦게라도 축하드립니다. ^^
좋은 강의 너무 감사합니다! 이 강의만 5번 넘게 돌려본 것 같습니다. CS 관련 개념을 정말 잘 모르던 상태에서 얕지만 넓게 이해할 수 있게 되었습니다. 하나하나에 대한 깊은 내용들은 다른 강의 따라가면서 채우겠습니다. 너무너무 감사합니다!
이 강의는 꼭 몽땅 외워두시는 것이 좋긴 합니다. 나중에 깊은 이론들을 배울 때 충분히 참고가 될 수 있습니다. 좋은 평가와 피드백 감사합니다.
스레드라는 것은 cpu의 실행 단위라고 하셨는데 그렇다면 이것을 말로 표현하게 될 때, 'cpu는 스레드를 수행하고 있어' 라고 해야 하나요? 아니면 'cpu가 몇 스레드 만큼의 작업을 완료했어' 이런 식으로 표현을 해야 하나요?
그리고 네이버 지식백과에서 보통 코어 개수와 스레드의 개수는 동일하다고 나와 있는데 어떻게 2700개 가량의 스레드가 있을 수 있나요??
'CPU가 스레드를 수행하고 있어'를 조금 더 자세히...CPU 0번 코어가 Thread를 수행하고 있어...로 하시면 더 자연스러울 것 같습니다. 그리고 CPU들이 대부분 하이퍼 스레딩을 지원합니다. 즉, 한 코어에서 2개 스레드를 동시에 처리합니다. 이 때문에 코어가 8개인 CPU라고 하더라도 프로세서는 16개가 있는 것으로 인식됩니다.
답은 간단합니다. 동시에 8개의 스레드를 처리할 수 있다면 나머지 2692개는 적어도 '대기' 상태 입니다. 그리고 모든 스레드가 항상 Running 상태는 아닙니다. Event를 Wait하는 상태일 수도 있고 Sleep 상태일 수도 있지요. 이 경우 사실상 CPU를 사용하지 않습니다.
이 강의는 댓글 질문 보는 맛도 있네요
피드백 감사합니다. 댓글에서 오가는 대화가 어떨 때는 더 중요할 수도 있지요. ^^
정말감사합니다... 인강이나 국비학원을 다니면서 답답한부분이 뻥뻥뚫리네요 ㅠㅠ 감사합니다
국비학원이라...어떤 과정을 공부하시나요??
@@nullnull_not_eq_null 게임개발자 과정을 공부했습니다!
강의 감사히들었습니다. 궁금한 점이 있는데요, 쿼드코어면 물리적으로 코어가 4개인 것은 이해했는데요. 논리적 프로세서가 x2가 되는 것은 물리적으로 하나의 코어가 2 등분 되어있는건가요? 아니면 페이징 기법같은 것을 통해 S/W적으로 작동이 2등분 되도록 되어있는건가요?
물리적인 개별 Core가 두 Thread의 명령을 한 번에 처리합니다. 이 때문에 코어가 4개라고 해도 작업관리자에서는 8개가 있는 것처럼 보입니다. 이는 하드웨어적 지원 때문에 가능한 것인데 '하이퍼스레딩'에 대해서 찾아보시면 자세한 정보와 원리를 알 수 있습니다. 감사합니다.
정말 정말 좋은 강의예요!!!!!!!
널널한 개발자님의 영상을 보다보면, 뭔가 가슴에 꽂히는게 있네요.
영상 잘보고 있습니다!
좋게 봐주셔서 감사합니다. 영상이 도움이 된 것 같아 정말 다행입니다. ^^;;;
전공 수업에서도 똑같이 process에게 주어진 메모리가 많다고 속인다는 말을 들었을 때는 '속인다'는 표현을 왜 쓰는지 도저히 이해가 안됐었는데 너무 감사합니다!
도움이 되셨다니 기쁩니다. ^^ 열공하시고 멋진 성과 거두기 바랍니다.
컴공 전공이라면 앞으로 개발자가 되려는 것인지 궁금하군요.
@@nullnull_not_eq_null
앞으로 프로그래밍이 사회에서 공기같은 존재가 될 것 같다는 생각에 개발자가 되고 싶지만, 제가 개발자로서 먹고 살 수 있을 까 하는 마음에 가지고 있는 두가지 걱정이 있습니다.
1. 프로그래머는 평생 공부해야 먹고 살 수 있다는 이야기
->어차피 어느 직업을 택하든 평생 배워야 한다는 점은 그렇게 다르지 않을 것 같다는 생각이 들어서 크게 마음 쓰이진 않습니다.
2. 프로그래머에게 가장 중요한 기량으로 보이는 '알고리즘'이 나에게 너무 벅차보인다.
->알고리즘을 강조하는 주변분들이 많아서 최근에 '프로그래밍 대회에서 배우는 알고리즘 문제해결전략'이라는 책을 사서 한번 훑어보았는데 제가 자신없는 수학적인 내용이 많고 내용이 정말 어려워서 내가 이걸 감당 할 수있을까 조금 두렵다는 생각이 듭니다.
길게 썼지만 한마디로 '앞으로 프로그래머 수요가 많을 것 같긴 하지만 1000명의 프로그래머중 정말 실력있는 10명 정도의 프로그래머가 대부분의 일을 다 할 것 같은데 내가 그 10명에 낄 수 있을까?' 하는 생각 때문에 고민이 됩니다. 지금은 사실 저 너머에 있는 공부할 거리들보다는 바로 앞에 있는 공부에 집중하고 있습니다.
알고리즘...중요합니다. 그래서 많은 분들이 알고리즘 대회준비도 해보고 문제도 풀고 그러고 계시죠. 그런데 저는 이게 마치 SKY대 가지고 대치동 학원다니는 것 같은 생각이 듭니다. 좋은 프로그래머가 되려면, 최고가 되려면 알고리즘과 수학기 중요한 것은 맞습니다. 그러나 그것은 일부에 지나지 않습니다.
알고리즘 중요합니다만
기본적인 프로그래밍 기술을 익히는 것도 매우 중요합니다.
그리고 실력있는 10명이 되지 못한다 해서 크게 문제가 되지도 않습니다. ^^
한 번 도전해보시죠!! 건투를 빕니다!!
@@nullnull_not_eq_null 감사합니다! 제가 직접 뭔가를 만들고 결과물이 바로 나올 수있는 분야 쪽으로 먼저 열심히 공부해 보려고 합니다.
올려주신 좋은 강의들로 열심히 해보겠습니다:)
비유가 너무 좋습니다
좋은 평가와 피드백 감사합니다. ^^
이렇게 좋은 강의를 유튜브에서 시청하고 공부할 수 있다는 것. 제가 한국인이여서 자랑스럽습니다. 정말 감사드립니다.
와우~~! 멋진 응원 감사합니다. ^^
나중에 실시간 스트리밍 하겠습니다. 몇 시 정도가 좋으실지 알려주세요. 한 번 맞춰서 열어 보겠습니다.
잘 들었습니다!
안녕하세요.
그러면 프로그램이 처음 시작될때(exe 더블클릭) 그 프로그램의 소스코드는 보조기억장치에서 주기억장치로 바로 로드되는 것이 아니라 먼저 가상 메모리에 로드되고 필요할 때마다 보조기억장치에서 주기억장치로 옮겨지는건가요..?
또 가상메모리도 결국에 저장이 되어야 하는데 그러면 가상메모리는 어디에 저장되는지 모르겠네요.
프로그램이 시작되어 프로세스가 되면 운영체제가 가상메모리를 부여합니다. 그리고 그 가상메모리 공간은 RAM + HDD로 이루어져 있다고 생각하면 됩니다. 그리고 소스코드가 아니라 번역된 기계어 코드가 가상메모리에 저장되는데 이 가상메모리 공간을 따라면 RAM이 나옵니다. 결국 RAM(주기억장치)에 기계어를 저장한 것이지요.
가상 메모리는 추상화된 형식입니다. 열공하세요~~~! ^^
@@nullnull_not_eq_null 감사합니다!!
강의 정말 감사하게 생각 하면서 보고 있습니다.
강의 중에 좀 헷갈려서 질문 드립니다.
프로세스의 메모리가 램이 아닌 하드디스크에 배정 되면
하드디스크도 램과 같이 컴퓨터를 종료하거나 프로세스가 종료되면 하드에 남지 않게 되는 건가요?
그리고 별개의 질문이지만
모든 상용 os들에서는 deadlock이 발생하기도 하나요?
혹시 만약 발생한다면 우리가 사용하는데 어떤 장애가 될 정도가 아니라서 우리가 못 느끼는 것인가요?
그리고 만약 발생하더라도 그에 대한 처리 방식이 있는 것이겠죠?
말씀하신 부분은 스왑 영역인데...그 부분은 OS가 알아서 지웁니다. 그러니 결과적으로 사라지는 것이죠. 그리고 데드락은 논리오류입니다. 운영체제 자체가 데드락이 나올 수 있겠지만 흔한 경우는 아닙니다. 무엇보다 회피할 수 있도록 구조화 되어 있다라고 말씀드릴 수 있겠습니다. 이 역시 대응 알고리즘이 있습니다. ^^
비전공자로서 너무나 유익한 강좌
정말 감사히 보겠습니다
비전공자 분들에게 맞춘 내용이긴 한데...이해에 큰 무리는 없는지 궁금하네요. 피드백 부탁드립니다. ^^
교수님 ilit 사이트가 온라인 강의 사이트 인가요 ?? 들어가보니깐 별다른게 없는 거 같아서요.
2:26 제목 하단에 CPU는 4개 라는 표현을 쓰셨는데 , 정확히는 CPU안에 있는 코어?라고 생각하면 되는거죠?
흠.. 코어마다 고유의 독립적인 레지스터와 캐시메모리가 있는건가요?
네 코어 개수 맞습니다. 코어마다 레지스터는 독립적이지만 캐시는 레이어에 따라 각자 혹은 공통으로 사용하는 것으로 알고 있습니다. 이 부분은 CPU 하드웨어에 대한 정보를 찾아서 확인해야 합니다.
프로세스 공간의 공유는 스레드 쓰는건가요?
아니오 그렇지 않습니다. 공유 메모리는 가상 메모리 시스템(특히 메모리 맵)으로 구현됩니다. 참고하시기 바랍니다.
감사합니다~ 잘 봤습니다.
좋게 봐주셔서 고맙습니다. :)
강의 감사합니다!
컴퓨터 전공하는 대학생인데 강의가 도움 많이 되었어요. 감사합니다!
진짜 쉽게 핵심을 잘 설명해주시네요!
좋은 평가 감사합니다. ^^
안녕하세요! 강의 잘 보고 있습니다. 항상 감사합니다!
강의를 보다가 궁금한 게 생겨서 댓글로 여쭤봅니다. CPU가 연산을 한다고 하셨는데, 그 연산 안에는 MS Word 를 사용하면서 거기에 글자를 타이핑하는 것도 포함되는 건가요? 결국에는 CPU가 연산을 한다는 얘기는 현재 프로그램을 실시간으로 사용하고 있는 중이라고 이해해도 되는 것인지 궁금합니다.
네, 포함됩니다.
@@nullnull_not_eq_null 답변 감사드립니다!! 좋은 하루 되세요!
몇 개월 전부터 철학자의 식사 문제나 서브넷 마스킹 등의 네트워크 문제로 이 채널의 영상을 찾아 봤습니다. 항상 채널주님이 말씀하셨는데, 컴퓨터는 software, hardware 로 이루어져 있고, 특히 software는 user, kernel 모드로 이루어져 있다로 시작하며 꼭 넓고 얕게 배우는 컴퓨터 구조... 강의를 들어라! 라고 하시는 말씀을 귀에 못이 박히도록 들었죠. 그때마다 아직 저에게 필요한 부분이 아니라 영상을 기대하며 미루고 있었는데 이번에 도커를 공부하다 이제 프로세스와 네트워크 그리고 컴퓨터 구조 등에 대해 더 많은 정보를 알아야 할 시기가 와서 보게 되었습니다. 기대한 만큼 너무 재미있고, 딱 가려운 곳을 긁어주셨네요!
** 요약 **
1. 운영체제는 접근 제어, 자원 관리, 스케줄링 등의 일을 하며 이때 각각의 프로세스는 독립적인 메모리 영역을 갖는다. 그러나 하나의 프로세스에는 여러 스레드가 존재할 수 있고, 스레드란 프로그램의 흐름이자 연산의 흐름이기 때문에 서로 자원을 공유할 수 있고, 이때 공유 자원 문제가 생길 수 있다.
2. 가상 메모리는 메모리 자원을 효율적으로 사용하기 위한 체제이고, 주기억장치 RAM, 그리고 HDD를 논리적으로 추상화한 것이다. 기존에 사용하던 프로세스가 RAM 의 자원을 사용 중이었는데 새로운 프로세스를 사용하려고 시도했고, 기존의 것은 우선 순위가 줄어 더이상 많은 연산이 필요 없을 때 프로세스가 사용하던 메모리를 RAM에서 HDD로 옮기고(Page out, 또는 Swap out), 새로운 프로세스가 RAM을 할당 받는다. 제한된 메모리 자원이 있지만 여러 프로세스를 실행 가능한 이유가 바로 이 이유 때문이다. 그래서 실행 중인 메모리를 따라가면 RAM 인줄 알았던 메모리가 HDD 등의 보조기억장치일 수 있다.
이번 영상에서 제가 갖고 싶은 부분은 이렇게 두 개가 있는 것 같군요. 좋은 영상 감사합니다~~
좋은 평가와 피드백 감사합니다. 사물 인터넷 시대라는 것이 모든 것이 컴퓨터로 바뀐다는 의미로 이해하고 있습니다. 다 Host인 셈이죠. 컴퓨터 구조를 조금만 외워두면 한결 수월해질 수 있습니다. 의견 감사합니다. ^^
페이지 아웃 되었을때, 어플리케이션의 메모리 접근 속도가 달라질꺼라 예상이 되는데, (램 vs 보조기억장치) 이부분은 스레드(프로세스)가 비활성화 된상태이기에 '괜찮다' 라고 이해하면 맞는 것인가요?
커널은 무엇인가요?
운영체제의 근간을 이루는 핵심코드들을 일컫는 단어 입니다. 한 마디로 '알맹이'! ^^
선생님! 그러면 '핸들'이라는 것은 무엇인가요?
쉽게 생각해서 '식별자'라고 볼 수 있습니다. 보통 값이나 포인터로 되어 있습니다.
감사합니다.
제가 더 감사합니다. ^^
강의 감사합니다!