Chapter03 프로세스 상태(휴식, 보류)와 문맥 교환

  Рет қаралды 6,812

널널한 개발자 TV

널널한 개발자 TV

Күн бұрын

앞 영상에 이어 프로세스 상태에 대해 다룬 영상입니다. 여기서 휴식, 보류 상태를 다루는데 각각은 Sleep과 Suspend 상태입니다. 이 둘은 어떻게 같고 다른지 알아보고 문맥교환(Context switching)의 의미도 함께 이해해봅니다. 그리고 여러분의 숙면을 응원하겠습니다. ^^;;;
[Sleep 함수와 우연 그리고 CPU로 랜덤뽑기]
• Sleep 함수와 우연 그리고 CPU로 ...
[2022-05-14 한빛미디어 이벤트 라이브 방송]
• 2022-05-14 한빛미디어 이벤트 라...

Пікірлер: 44
@tmdgh100
@tmdgh100 2 жыл бұрын
하루에 한강이 아니었군요! 항상 잘 듣고 있습니다 :)
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
많을 때는 6개 이상 업로드 됩니다. 참고하시기 바랍니다. 감사합니다. ^^
@zin7226
@zin7226 2 жыл бұрын
잘봤습니다. sleep 하러 가볼게요
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
이런 멋지고 센스 넘치는 피드백 감사합니다. ^^
@andodesjoke8742
@andodesjoke8742 2 жыл бұрын
강의 잘 들었습니다. 감사합니다! 다른 강의도 들으러 가겠습니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
가비지 컬렉터...이것은 꼭 확인해보시기 바랍니다. ^^
@ironpack8207
@ironpack8207 10 ай бұрын
강의 감사합니다. ^^ 질문이 있는데요 1. 휴지상태와 보류 상태는 대기 상태의 한 종류인것인가요? 대기 상태, 즉 블록상태에 휴지 상태와 보류상태가 포함된다고 생각해도 될까요? 그렇다면 활성 상태(휴지상태)와 비활성 상태(보류상태)가 공존한다고 생각해도 될지 궁금합니다. 그이유는 블록 상태에서 휴지 상태와 보류상태로 전이되기 때문입니다. 2. 또한 영상에서 상태 다이어그램에서 휴지상태는 따로 표시가 안되는데 보류 상태에 들어간다고 생각하면 되는지요? 개념이 좀 헛갈리는 것 같은데 추천 영상 알려주시면 감사하겠습니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 10 ай бұрын
활성, 비활성(휴지상태)이 서로 반대가 되는 상태입니다. 보류는 연산을 미룬 것으로 이해하면 되겠습니다. 핵심은 프로세스(혹은 스레드)가 CPU 자원을 사용하기 위해 대기 중인 것인지 아니면 아예 사용 계획이 전혀 없는 상태인 것인지가 중요하겠습니다. 참고하시기 바랍니다. :)
@ironpack8207
@ironpack8207 10 ай бұрын
@@nullnull_not_eq_null CPU 자원 할당 가능성 여부가 기준이군요 휴지상태와 보류 상태 모두 비활성 상태로 Sleep 상태와 같이 CPU 자원을 할당이 가능하지 않는(계획이 전혀 없는)으로 이해 하면 되겠네요. 컨디션 얼른 회복하시길 바랍니다 감사합니다. ^_^
@갈가마구
@갈가마구 2 жыл бұрын
sleep 자발적, 정해진 시간 뒤에 다시 ready queue에 복귀 suspend 비 자발적, 대기 시간이 정해져 있지 않다 감사합니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
대략 그런 정도로 이해하시면 충분하지 싶습니다. ^^
@세승-v4s
@세승-v4s 2 жыл бұрын
오랜만에 다시듣다가 질문 남깁니다! 1. 특정 쓰레드가 sleep() 함수를 실행하려면 sleep에 해당하는 명령이 자신의 순서를 기다려서 Ready Queue의 가장 앞으로 이동하여 OS에 의해 디스패치되어야 하나요? 2. 외부요인에 의한 suspend는 OS에 의해 강제적으로 Ready Queue의 임의의 위치에서 제외되는 건가요?
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
1. Sleep() 호출하는 스레드를 OS가 인식하고 이동시킵니다. 스레드 스스로 넘어가는 것은 아니라고 봐야 하겠습니다. 2. 스레드 상태를 변경하는 것은 관련 API를 호출하는 방법을 통해 이루어집니다. 호출 시점을 OS는 알고 있다고 봐야 겠습니다. 관리를 위해 대기열을 이동시키는 것은 오롯이 OS의 몫이지요.
@세승-v4s
@세승-v4s 2 жыл бұрын
@@nullnull_not_eq_null 1번 질문에 대한 답변이 이해하기에 모호하여 다시 질문 드립니다. 질문하려던 내용은 “sleep()을 호출하려는 스레드도 ready queue안의 순서를 기다려서 자신의 차례(이전의 다른 명령들이 모두 cpu에 의해 처리(연산) 되어 ready queue의 맨 앞으로 이동한 상태)가 오기를 기다린 후, os에 의해 디스패치되어 sleep()이 수행되는가?” 입니다. 감사합니다!
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
네, 그렇습니다. Sleep() 함수를 호출하는 코드를 실행해야 하니까요.
@fernandes1107
@fernandes1107 2 жыл бұрын
안녕하세요 선생님 갑자기 헷갈리는 부분이 있어서 그러는데요 Context Switch가 프로세스 단위로 이루어 진다고 하셨는데 그러면 같은 프로세스 내의 스레드 간은 Context Switch가 안이루어 지는 건가요?? 제가 알기로는 윈도우 OS 기준으로 CPU 연산의 단위는 스레드라고 알고 있어서 헷갈리는 것 같습니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
Context switching은 Job이건 Process건 Thread건 심지어 System call에 의한 모드 전환(User -> Kernel)시에도 문맥교환이라고 합니다. 개념어로 이해하시면 되겠습니다. 그리고 CPU에서 연산단위는 최종적으로 Thread로 보는 것이 맞습니다. 다만 그 스레드들이 속한 프로세스 상태에 대해 Thread들은 의존하게 된다는 특징이 있다는 것을 아시면 되겠습니다. ^^
@sHuu-x2c
@sHuu-x2c Жыл бұрын
컨텍스트 스위칭은 커널 스레드 단위로 이루어집니다. 프로세스 단위라는 것은 과거 싱글 스레드, 멀티 프로세스 환경이었고 준비큐나 대기큐에 담기는 것도 PCB였죠 멀티 스레드 환경으로 넘어오면서 스레드만을 위한 TCB가 나왔고 준비큐나 대기큐에 큐잉되는 것도 TCB입니다. 리눅스에서는 프로세스와 스레드를 별도로 구분하지 않고 Task라 부르게 됩니다. 컨텍스트 스위칭은 크게 보자면 현재 Core에서 실행중인 프로세스의 커널 스레드가 다른 프로세스의 커널 스레드와 교환된다면 프로세스 컨텍스트 스위칭입니다. 만약 동일 프로세스 내에 다른 커널 스레드와 교환된다면 스레드 컨텍스트 스위칭이라고 합니다. (모두 커널 관점입니다) 스레드 컨텍스트 스위칭은 문맥은 교환하되 캐시 메모리에 있는 데이터는 일부 사용될 여지가 있기 때문에 프로세스 컨텍스트 스위칭보다 오버헤드가 적다는 점이 있습니다.
@inro4568
@inro4568 2 жыл бұрын
20220805
@marunarae550
@marunarae550 2 жыл бұрын
오늘은 context switch네요. pcb라는 친구에 상태들을 다 백업시키고 나중에 다시 실행시킬때 원상복구시킨다.. 잘 봤습니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
프로세스 수준에서는 PCB, 스레드는 TCB이며 스레드는 프로세스 스케줄에 의존적입니다. 참고하시기 바랍니다. ^^
@ConstantSTAN
@ConstantSTAN 2 жыл бұрын
아하 프로세스가 타 프로세스의 메모리 주소공간에 접근하는 등의 허용되지 않은 연산을 하려하면 OS가 해당 프로세스를 강제로 종료시키는데, 이 때 이 프로세스의 상태가 바로 완료(abort에 의한)로 변경되는 것이 아니라 보류 상태를 거쳤다가 종료로 간다고 보면 될까요?
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
정확히는 '종료'가 아니라 '멈춤'입니다. 연산을 말 그대로 하지 않고 멈추는 것이죠. 그리고 자원을 강제 회수함으로써 Process를 삭제해 종료처리가 이루어집니다. 참고하시기 바랍니다. ^^
@배고픈태크
@배고픈태크 2 жыл бұрын
항상 잘듣고있습니다 감사합니다!!~
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
좋은 평가와 피드백 감사합니다. ^^;;
@ConstantSTAN
@ConstantSTAN 2 жыл бұрын
sleap과 suspend와 같은 상태 전이와 ready queue에 대한 개념이 프로세스 뿐만이 아니라 스레드 레벨에서도 존재하는 것인가요?? 자료를 찾아보았는데, 스레드도 생명주기를 갖고 각 상태 별 이름만 다를 뿐 프로세스의 생명주기와 비슷해 보이네요!
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
정확히는 Thread의 생명 주기를 기준으로 보는 것이 좋겠습니다. Process는 최소 1개의 스레드를 갖기 때문입니다. 참고하시기 바랍니다.
@ConstantSTAN
@ConstantSTAN 2 жыл бұрын
아! 그렇군요 감사합니다.
@dentalkiwi
@dentalkiwi 2 жыл бұрын
감사합니다
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
저도 감사합니다. ^^
@세승-v4s
@세승-v4s 2 жыл бұрын
질문있습니다~ 특정 thread가 sleep() 함수에 해당하는 코드를 실행하려면 무조건 Ready Queue 맨앞에 도달할 때까지 기다려야 실행가능 한건가요? suspend는 외부요인이기때문에 Ready Queue의 어느 부분에 있어도 OS가 골라서 빼낼 수 있을 것 같은데, sleep은 프로세스의 thread 자발적으로 선택하는 것이라서 그 부분을 OS가 미리 예측해서 thread가 Ready Queue의 맨앞으로 이동하여 sleep을 실행하기 전에는 알 수 없을 것 같은데, 어떤게 맞는건가요? 강의 잘 듣고 있습니다 감사합니다~
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
Queue 자료구조 상 중간에 굳이 빼는 일을 하지 않습니다. Queue에 들어오는 순서대로 기계적 처리를 한다고 생각하는 것이 맞겠습니다. 의견 감사합니다.
@세승-v4s
@세승-v4s 2 жыл бұрын
@@nullnull_not_eq_null 1. 특정 쓰레드가 sleep() 함수를 호출하려면 해당 코드가 Ready Queue의 가장 앞으로 이동하여 OS에 의해 디스패치되어야 한다는 것인가요? 2. 중간에 굳이 빼는 일을 하지 않는다고 하셨는데, 그럼 외부요인에 의한 suspend의 경우에도 중간에서 빼는 일은 발생하지 않는건가요?
@k--k--k
@k--k--k 11 ай бұрын
@@세승-v4s 저도 궁금해서 gpt에 질문해본 결과, windows나 linux 등 대부분의 os에서는 ready queue의 제일 뒤로 추가가 된 후, 대기하다가 자기 차례가 오면 실행된다고 합니다. 그렇지 않은 os는 FreeBSD가 있다네요
@이정-i1l
@이정-i1l 2 жыл бұрын
I/0가 발생하면 Thread의 상태가 blocked 상태가 되고(동기 I/O라는 가정) readyQ에 있는 Thread를 core에 올려서 실행시키고 해당 요청이 완료되면 다시 blocked -> readyQ에 넣는다. 라고 이해했습니다. 강의를 듣다가 의문이 생긴 점 중 하나가 파일 I/O라면 OS System call 발생하고 Driver에게 요청해서 INT 발생하고 Thread Blocked 상태 됐다가 완료되면 INT 다시 발생해서 완료됐다는 거 알려주고 Thread 상태 변화해서 요청한 행동 이어간다 라고 납득이 가는데.. 네트워크 송신(send)의 경우 커널영역에 있는 네트워크 송신 버퍼에 데이터 복사하는 게 전부인데 이런 경우도 running -> block -> readyQ 와 같은 상태변화가 일어나나요?? 너무 비효율적인 것 같아서 질문합니다.
@이정-i1l
@이정-i1l 2 жыл бұрын
요약해보자면.. 저는 INT 발생 여부를 기준으로 스레드가 상태변화를 한다고 생각하고 있는데... 모드의 전환(유저모드 -> 커널모드)이 이뤄지면 스레드가 상태변화가 일어난다고 생각하면 되는건가요??
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
소켓이나 파일이나 다 같은 파일입니다. 별도로 설정하지 않는 이상 읽기나 쓰기 요청에 대해서 실제 I/O가 끝날 때까지 호출자 스레드는 Block됩니다. 참고하시기 바랍니다.
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
User -> Kernel Context switching이 일어난다 해서 User mode 스레드 상태변화가 발생하는 것은 아닙니다. 해당 스레드가 함수가 반환할 때까지 멈추는 것이 스레드 상태변화를 야기하지는 않습니다. 단지 실행 상태지만 다음 연산으로 넘어가지 못하는 것 뿐입니다. 참고하시기 바랍니다.
@이정-i1l
@이정-i1l 2 жыл бұрын
@@nullnull_not_eq_null 자세한 설명 감사드립니다. 관련해서 좀 더 자세하게 알고싶어서 찾아보고 싶은데 혹시 어떤걸 봐야 알 수 있을까요??
@nullnull_not_eq_null
@nullnull_not_eq_null 2 жыл бұрын
이런 이야기는 기본적으로 운영체제론에 포함됩니다. 그러나 디테일하게 배우려면 윈도우 운영체제의 경우 Windows Internals라는 책이 있습니다. 제가 보기도 어려운 책이긴 한데...이런 책들에 매우 상세히 나와 있습니다. 참고하시기 바랍니다. ^^
@ryanlee5435
@ryanlee5435 2 жыл бұрын
1빠
Chapter03 프로세스 생성과 복사 fork()와 exec()
19:19
널널한 개발자 TV
Рет қаралды 8 М.
Chapter03 프로세스와 스레드 매우중요
19:17
널널한 개발자 TV
Рет қаралды 14 М.
Minecraft Creeper Family is back! #minecraft #funny #memes
00:26
Officer Rabbit is so bad. He made Luffy deaf. #funny #supersiblings #comedy
00:18
Funny superhero siblings
Рет қаралды 14 МЛН
pumpkins #shorts
00:39
Mr DegrEE
Рет қаралды 57 МЛН
إخفاء الطعام سرًا تحت الطاولة للتناول لاحقًا 😏🍽️
00:28
حرف إبداعية للمنزل في 5 دقائق
Рет қаралды 43 МЛН
DMA를 알면 고성능 소켓이 보인다!
16:15
널널한 개발자 TV
Рет қаралды 10 М.
대충 넘어가는 교착상태(Dead lock)
19:43
널널한 개발자 TV
Рет қаралды 4,8 М.
L05 Decision Trees - 데이터과학 2024 국민대학교
45:26
‍박하명(교원-인공지능전공)
Рет қаралды 64
Chapter04 CPU 스케줄링 개요
24:34
널널한 개발자 TV
Рет қаралды 6 М.
인터럽트에서 DirectX까지
29:16
널널한 개발자 TV
Рет қаралды 11 М.
웹 브라우저에 URL 입력하면 일어나는 일 - 인프라 위주
22:14
널널한 개발자 TV
Рет қаралды 49 М.
임계구역 해결방법 결론은 하나 'Queue'!
26:15
널널한 개발자 TV
Рет қаралды 4,8 М.
가상 메모리 접근 권한
15:06
널널한 개발자 TV
Рет қаралды 4,9 М.
Minecraft Creeper Family is back! #minecraft #funny #memes
00:26