안녕하세요. 강의 잘 듣고 있습니다. 오버라이딩 관련하여 질문드립니다. class Parent { static void display() { System.out.println("부모의 static"); } } class Child extends Parent { static void display() { System.out.println("자식의 static"); } } public class MyClass { public static void main(String args[]) { Child c = new Child(); c.display(); } } 만약 이렇게 하면 자식과 부모에서 오버라이딩이 가능한 것 같은데 이렇게 일반적으로 사용하지 않는지 궁금합니다. 감사합니다.
프로세스가 실행하다가 스스로 cpu를 반납하면 cpu사용량이 적은 것으로 I/O BOund Process일 확률이 높고, 실행하다가 타임 슬라이스 다 써서 반납하는 상황이면 CPU Bound Process일 확률이 높다고 하셨는데, sleep이나 yield로 사용자가 의도적 반납을 한 경우에는 어떻게 되는걸까요?
Spin Count 초과 이후 스레드가 'Blocked' 상태에서 깨어나는 과정에서의 Critical Section과 SRWLOCK의 차이가 궁금합니다. 영천님의 LockTest 예제 코드를 이용하여 Lock을 선점한 스레드가 Lock을 해제하기 전에 Sleep() 코드를 추가한 상태에서 디버깅을 시작해보았습니다. (대기 중인 스레드의 Spin Count 초과 유도) 우선 두 경우 모두 락을 선점한 스레드가 락을 해제하면서 어떤 메모리 주소와 맵핑된 Thread ID를 읽어와서 내부적으로 NtAlertThreadByThreadId()의 인자로 넘겨주는것은 동일하였습니다. 하지만 Critical Section의 경우에는 LeaveCriticalSection() 내부에서 RtlpWakeByAddress()를 추가로 호출하고 대기중인 Thread ID를 얻어온 뒤 그 함수의 내부에서 NtAlertThreadByThreadId()를 호출하는 반면, SRWlock의 경우에는 ReleaseSRWLockExclusive() 내부에서 다른 함수 Call 없이 Critical Section보다는 보다 간소화(?)된 동작으로 Thread ID를 얻어오고 곧바로 NtAlertThreadByThreadId()를 호출하였습니다. 이걸보고 든 의문인데 영천님 블로그에 올라와있는 'Spin Count 도중 YieldProcessor() 관련 내용'을 제외하고 혹시 Critical Section과 SRWlock사이 성능 차이의 이유는 애초에 SRWlock은 Spin Count를 초과한 상태일때 ReleaseSRWLockExclusive()을 호출한 스레드에서 보다 간소화된 동작과 불필요한 함수 Call 없이 Thread ID를 얻어올 수 있도록 어떠한 정보(?)를 추가해준 뒤 Blocked 상태에 빠지게되는 등의 기능 때문이라고 봐도 될까요? 아직 근거 없는 추측이긴 합니다...
안녕하세요. 강의 너무 잘 듣고있습니다. 그런데 FreeRTOS 소개 강의를 듣다가, 단점으로 멀티코어 지원 안됨. 이라는 말을 듣고 이런저런 검색을 해보았는데요.. https://embeddedai.tistory.com/entry/FreeRTOS-%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4-%EC%A7%80%EC%9B%90 이런 글을 보면, 최근 FreeRTOS가 SMP? 기능을 도입해서 멀티코어 지원을 하도록 되었다는 것 같은데, 맞을까요?
안녕하세요, 항상 도움 받고 있습니다. Q&A는 아니고 강의 진행 간 강의 중복 업로드가 확인되어 해당 내용 전달 드립니다. "42. 워크 핸들러에 전달되는 매개 인자 디버깅"의 강의가 "52. ftrace 분석: 워크큐 와치독" 강의로 잘못 업로드된 것 같으니, 확인 부탁드립니다. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 운영체제에서 제일 중요한게 커널이라고 했는데 커널이 프로그램인가요? 운영체제가 윈도우, 리눅스이면 이 운영체제 중에서 정체가 뭔지 궁금합니다 또 사람과 커널의 인터페이스 종류가 gui, cli 라고 하셨는데 인터페이스의 개념을 뭐라고 생각해야 하나요? 컴퓨터는 이런 개념들이 너무 모호해서 이해해가기 어렵네요
안녕하세요 선생님 강의 잘 듣고 있습니다. 예전에 운영체제에 대해 배울 때, '교착상태의 4가지 필요충분조건'이라고 배웠었는데, 교안에서는 필요조건이지, 필요충분조건이 아니라고 되어있더라구요. 그렇다면, 4가지 조건이 충족되어도 교착상태가 발생하지 않을 수 있다는 것인데, 어떤 경우인지 궁금합니다.
안녕하세요 선생님. 강의 잘 듣고 있습니다. 오늘은 렌더 트리와 렌더 레이어에 대해 질문이 있습니다. 렌더 트리가 랜더 객체들이 모인 거라면, 그 렌더 객체가 랜더 트리와 그래픽 레이어로 분리되는 것으로 보면 될까요? 렌더 객체가 기본적으로는 렌더 레이어가 되지만, 일부(GPU에서 처리되는 30개 미만 정도)는 그래픽 레이어가 되는 걸로 이해하면 맞는 걸까요? 답변 미리 감사드립니다.
안녕하십니까 운영체제 관련 강의 수강중인 학생입니다. 강의를 보다가 궁금한점이 생겨 질문을 남깁니다. 하드웨어 수행 과정 챕터의 용어를 설명해주시는 과정에서 동기식 입출력과 비동기식 입출력에 대한 내용이 있습니다. 제어권을 바로 다시 돌려받냐, 제어권을 넘긴상태로 일을 진행하지 못하고 대기하냐에 대한 설명은 블로킹/논블로킹으로 알고있고 동기/비동기의 경우에는 결과 순서가 보장되냐의 차이로 알고있습니다. 해당 개념들이 유사하지만 조금 다른걸로 이해하고있는데, 동기식 입출력과 비동기식 입출력이라고 말씀해주신 이유가 궁금합니다. 혹시 제가 놓친 부분이 있을까요??
안녕하세요! 강의 잘 듣고 있습니다. 선생님. 오늘은 로컬스토리지, 세션스토리지, 쿠키의 공통점 에서 "캐싱으로 인해 다운로드 하는 컨텐츠가 줄어들어 웹사이트의 컨텐츠를 더 빨리 다운로드가 가능하다"는 부분에 대해 이해가 안가는 부분이 있어 질문드립니다. 우선 쿠키는 사용자 정보를 저장하는 건데, 웹사이트의 컨텐츠를 빨리 받는 것과 관련이 어떻게 있는지 모르겠습니다. 또한 로컬스토리지 같은 경우도 사용 예시가 '입력창에 입력했던 기록', '새로고침해도 남아있는 필터링 값', '장바구니', '로그인 유지'인데 웹사이트의 컨텐츠 다운로드 속도를 어떻게 빠르게 하는지는 모르겠습니다. 좋은 강의 해주셔서 잘 듣고 있습니다. 답변 미리 감사드립니다!
하드웨어 수행 과정 - CPU 연산과 I/O 연산, 인터럽트, 사용자 모드와 커널모드, 시스템 콜 용어 정리 수강 중입니다. p.10 의 프로그램 수행 과정 내용에서 프로그램 A 가 입출력 명령을 지시했을 때, 프로세스 A 가 직접 인터럽트를 발생시킨다는 부분의 내용이 잘 이해가 가지 않습니다. 프로그램 A 에서 입출력과 관련한 명령이 존재하는 경우 프로세스 A 에서 시스템 콜을 실행(트랩)하고, 프로세스 A 가 커널 모드로 변경되어 실제 I/O 명령이 입출력 블로킹으로 수행되므로 이 때 CPU 제어권이 프로그램 B 에게 넘어가야 하는 것 아닌가요? 이후 I/O 명령이 완료되는 경우 인터럽트가 발생하는 흐름은 동일하게 동작하는 것으로 이해했는데 2,3번 수행 과정이 제가 알고 있는 내용과는 일치하지 않는 것 같아서 질문 드립니다.
안녕하세요! 강의 너무 잘 듣고 있습니다. 오늘은 IPv4, IPv6에서 질문이 있습니다. "일반적으로 IPv6가 속도가 빠르지만, 일부사례에서는 IP4보다 속도가 느린 경우가 있다" 그 일부사례가 어떤 경우가 있을까요? IPv6의 헤더 고정길이(40비트)가 더 클 수 있어서 그런걸까요? 아니면 네트워크 장치(라우터 등) 중에서 IPv6와 호환(?)이 안되는 경우가 있어서 그런걸까요? 질문 받아주셔서 감사드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) { if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 ) { xSwitchRequired = pdTRUE; } else { mtCOVERAGE_TEST_MARKER(); } } configUSE_TIME_SLICING값이 1->0이 되면 위 코드의 실행 조건이 변경되어 스케쥴러가 cpu 양보를 고려하지 않아 처음 cpu를 잡은 task만 반복해서 동작하게 된다는 것 까지는 이해했습니다. 이때 저의 경우에 (1) configUSE_TIME_SLICING == 1 이면 'bbbba...'으로 b가 더 많이 수행되고 (2) configUSE_TIME_SLICING == 0 이면 'a'만 계속 해서 출력되는데 위에서 저의 이해를 바탕으로 configUSE_TIME_SLICING == 1인 경우에 'aaaaaaaaaaab...' 이런식으로 나와야 할 것 같은데(혹은 (2)번에서 'b'만 출력) 두 경우에서 먼저 cpu를 선점하는 task가 다른 이유가 궁금합니다!
안녕하세요 선생님 강의 잘 듣고 있습니다. 전송계층에서 UDP 프로토콜을 공부하다 의문이 있어 질문 드리게 되었습니다. 전송 계층은 데이터가 오류없이 순서대로 전달되도록 돕는 계층이라고 설명해주셨는데요, 전송계층의 대표 프로토콜 중 하나인 UDP는 신뢰성이 없고, 순서도 보장하지 않는데, 전송 계층의 대표 프로토콜이 될 수 있는 이유가 궁금합니다. 기업들에서 UDP를 최적화해서 신뢰성있도록 바꾸기 때문인 걸까요?? 질문 받아주셔서 감사합니다.
안녕하세요! MTU 강의를 듣다가 이해하지 못한 부분이 있어 질문드립니다. 교재에, "데이터는 전송 전에 패킷 단위로 쪼개지며, 이때 MTU를 기준으로 크기가 결정됩니다" 부분을 읽고 처음 패킷을 만드는 시점 즉, "전송 전"에 이미 PMTUD를 통해 '최대 패킷 크기'를 파악하고 그에 맞춰 패킷 크기를 정했다고 이해했습니다. 그런데 그렇다면 이후 패킷 분할하는 과정은 원래 필요가 없는 거 아닌가요?? 처음 패킷이 생성되는 시점에 이미 Path MTU에 맞춰서 패킷이 생성되었을거라 생각했습니다.