- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님! 질문이 있습니다! 하드웨어 소프트웨어 프로세스 이렇게 3층집이 구성되는 걸까요? 또 0강에서 핵심 키워드를 ### 이번 강의 핵심 Keyword - Interupt - Interupt Request(IRQ) - IRQ는 고유 번호를 가짐 - System Call 이렇게 잡았는데 맞나요? 아주아주 간단하게 정리를하며 강의를 듣는데도 0강은 운영체제(OS)는 Process를 Support하고, 하드웨어를 관리 및 제어 합니다. 컴퓨터는 주변기기와의 상호작용(I/O = 입출력)을 통해 작동합니다. 이 과정에서 Interupt(방해)가 발생합니다. 이렇게 밖에 정리를 못했네요. 위의 질문에 답변을 받으면 정리에 추가하려합니다.
브라우저 캐시는 브라우저에서 가지고 있으니 (네임서버에 요청을 하기 이전인) 실제 IP 주소를 모르는 상황에서도 당연히 접근 가능하다고 이해를 했습니다. 그런데 공유 프록시 캐시의 경우는 서버의 앞단에 위치하고 있는 것 같은데, 실제 서버의 IP 주소를 모르는 상황에서도 이 부분에 접근이 가능한 것인가요? 혹시 가능하다면 이게 어떤 방식으로 가능한건가요...? 혹시 이 공유 프록시 캐시의 경우는 일반 인터넷 사용자보다는 nginx 등을 프록시 서버로 이용하도록 구축된 서버 측에서 다른 서버에 요청을 하는 등의 상황에서 이용하게 된다고 보면 될까요? 그냥 일반 인터넷 사용자의 경우는 브라우저 캐시만 확인하고 없는 경우에 네임서버에 요청을 보내어 실제 IP주소를 얻어온다고 봐도 되는걸까요?
강의 내용에 비해서 교안에 있는 내용은 많이 짧다고 느껴집니다. 왜 이미지스프라이트, 인코딩, 코드압축에 대한 내용이 교안에 없는것인지... 유독 이번 강의가 이해가 잘 안되어 이래저래 구글링을 했네요. 특히 이미지스프라이트에 대한 설명을 수정하면 좋을 것 같다고 생각합니다. 제가 이해한 내용은 여러 이미지를 모아 하나의 큰 이미지로 다운받고 CSS를 이용해 해당 이미지의 좌표값을 지정하여 표기한다. 라는 것인데 강사분이 더 깔끔하게 다듬어주시면 좋을 것 같습니다.
안녕하세요. 선생님. 강의 잘 보고 있습니다..! 가상 메모리를 사용하는 이유 중의 하나가 프로세스 간의 독립성을 보장할 수 있다고 설명해주셨는데요. 이 부분이 잘 이해가 가지 않습니다. 실제 메모리를 사용한다고 하더라도 각 프로세스마다 독립적인 메모리 주소 공간이 부여되어 독립성이 보장될 것 같은데, 어떤 점이 다르다고 볼 수 있는 걸까요? 미리 감사드립니다!
강의에서 대규모 트래픽을 로드밸런서를 통해 분산한다고 했는데 그럼 로드밸런서 자체에 트래픽이 몰리면서 병목현상이 생기지는 않나요? 요청 하나하나에 대해 적절한 응답을 해줄 필요가 없이 단순히 요청을 여러 서버로 나눠주는 역할만 해서 트래픽이 아무리 몰려도 딱히 병목현상이 없는걸까요?
안녕하세요. 프로세스 동기화에서 뮤텍스, 세마포 부분 공부 중 궁금한 게 생겨 질문 올리게 되었습니다. 두 프로세스가 임계 구역 코드를 실행하려고 하는데 이를 동기화 하기 위해 뮤텍스 도구를 사용한다고 하였을 시, 뮤텍스는 전역 변수를 하나 두고 해당 전역 변수의 값이 false면 실행하고 true면 반복문으로 계속 해당 전역 변수의 값을 확인하다가 false로 바뀌면 실행하는 것인데 만약에 두 프로세스가 동시에 전역 변수를 가져와서 CPU 레지스터에 세팅한다고 하면 의미가 없는 거 아닌가요? 확률적으로는 매우 희박하겠지만 이런 확률은 고려하지 않는 것인지 궁금하네요. 동일 프로세스 내에서 스레드 간에 발생하는 거라면 Java의 Synchronized 키워드를 붙인다고 하면 이해가 가겠는데 다른 프로세스 간에 발생하는 거라면 기본적으로는 자원을 공유하지 않으니까 공유 메모리에 있는 변수를 이용할 것 같은데 이런 경우에도 Java의 Synchronized 키워드 같은 게 있는 걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Array에 저장되는 자료의 자료형이 동일하다고 가정하기 때문에 element당 차지하는 바이트 수가 같다고 생각할 수 있는 걸까요? 그렇다면 자료형이 동일하면 바이트 수가 항상 같은가요?
안녕하세요 강사님. 컨텍트 스위칭 관련하여 궁금한점이 있어 질문드립니다. 아래와 같은 상황에서 우선 순위사 제일 높은 task를 컨텍트 스위칭 전에 cpu 자원을 사용하게 하고 싶습니다. task1 : 우선 순위 5 (suspend 상태) task2 : 우선 순위 4 task3 : 우선 선위 4 우선 task2가 실행하던 도중 task1을 resume 하고 바로 portyield를 실행하게 되면 우선 순위가 동일한 task3번이 cpu를 점유하여 일을 처리하다가 컨텍트 스위칭이 발생하게 되면 task1이 cpu를 점유가게 될텐데 제가 궁금한건 task2에서 task1을 resume 한 후 컨택트 스위칭이 발생하기 전에 cpu를 task1이 점유하게 하는 방법이 없는지 궁금합니다. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 별거아닌 질문이라 죄송합니다ㅜ. 다름이 아니라 노션에서는 키들의 이름이 다 영어로 되어있는데, 면접에서도 영어로 여쭤보시는 경우가 대부분일까요??
안녕하세요, 우선 재미있는 강의 만들어주셔서 너무 감사합니다. 다름이 아니라, 이번에 운영체제관련해서 깊이 공부해보고자 수강했습니다. 교재도 있으면 좋을듯하여, 말씀하신 책을 구입했는데 곰 그림책은 절판 된듯하고, 새 개정판이 나와서 해당 책으로 구입했습니다. 혹시 해당 책으로 강의 들어도 문제 없을까요? 감사합니다.
안녕하세요. 강의 학습 + 커뮤니티 질문 읽어보다가 궁금한 내용이 있어 올리게 되었습니다. 보조기억장치 (ex. HDD) 에 저장된 프로그램이 메모리에 적재되어 커널 영역에 PCB가 생성되면서 프로세스가 되고 커널 스레드가 1개 이상 생성되는 걸로 알게 되었는데요. Java의 JVM이나 Nginx 등 Linux 에서 "ps -ef" 커맨드로 찍어보니 커널 스레드가 여러 개 생성되어 있는 경우에 궁금한 게 하나 있습니다. 해당 강의 질문 중에 멀티 스레드 모델에 관한 감자님의 답변을 읽어보니 User-Level Thread, Kernel-Level Thread, Multi-Level Thread (Combined) 있다고 답변하셨는데 User-Level Thread는 커널 스레드 1개와 다수의 유저 스레드가 연결되어 사용되어 한 개의 스레드가 입출력 I/O로 Block 되면 다른 유저 스레드도 Block이 되어 프로세스 상태가 대기 상태로 바뀌고 해당 프로세스 PCB가 대기 큐로 이동하는 걸로 이해했습니다. User-Level Thread를 제외한 Kernel-Level, Multi-Level Thread에서는 커널 스레드 1개가 입출력 I/O로 Block 되어도 다른 커널 스레드로 사용자 스레드가 연결되어 모든 스레드가 Block 되지 않는다. --> 여기에서 그럼 입출력 I/O로 특정 커널 스레드가 Block 되면 입출력 대기 큐에 해당 프로세스 PCB가 있고 Block 되지 않은 커널 스레드도 있으니 실행을 마치면 준비 큐에도 해당 프로세스가 PCB가 중복으로 있다고 이해해야 할까요? 질문을 조금 어렵게 해서 죄송합니다...
헤더 효율화를 위해 CRC(순환 중복검사)를 제외합니다. 다만 상위 프로토콜(TCP, UDP)에서 체크섬이 있기 때문에 이를 제거할 수 있습니다. 이 두 문장의 연결이 이해가 안됩니다. 단순히 접속사를 잘못 쓰신건지요? 원래 의도하신 건 '상위 프로토콜에 체크섬이 있기 때문에 IPv6에서 헤더효율화를 위한 CRC제외가 가능하다' 라는 의미인지요?
안녕하세요. portYIELD() 사용법에 대해 궁금한게 있어 질문드립니다. portYIELD()를 실행하게 되면 task가 점유하고 있던 CPU를 반납하는 명령으로 알고 있습니다. 그런데 아래의 그림과 같이 실행을 하게 되면 TaskMain은 실행 되지 않아야 하지 않는지요? #define TASK_MAIN_PRIO 5 #define TASK_TASK1_PRIO 4 #define TASK_TASK2_PRIO 3 #define TASK_TASK3_PRIO 2 TaskHandle_t xHandleMain, xTask1Handle, xTask2Handle; void userThread(void) { xTaskCreate((TaskFunction_t)TaskMain, "TaskMain", 128, NULL, TASK_MAIN_PRIO, &xHandleMain); xTaskCreate((TaskFunction_t)vTask1, "vTask1", 128, NULL, TASK_TASK1_PRIO, &xTask1Handle); } void TaskMain(void const *pvParameters) { while(1) { for(uint8_t i=0; i<5; i++) { HAL_GPIO_TogglePin(GPIO5_BEAD_GPIO_Port, GPIO5_BEAD_Pin); HAL_Delay(1); } vTaskSuspend(xHandleMain); } } void vTask1(void const *pvParameters) { while(1) { for(uint8_t i=0; i<5; i++) { HAL_GPIO_TogglePin(GPIO4_BEAD_GPIO_Port, GPIO4_BEAD_Pin); HAL_Delay(1); } portYIELD(); vTaskResume(xHandleMain); //portYIELD(); } } 위 소스를 보게 되면 최초 MainTask가 실행을 하다가 5번 GPIO를 5번 토굴하고 block 상태로 전환 Task1번에서 gpio를 5번 토굴하고 vTaskResume을 실행하기 전에 portYIELD()를 만나기 때문에vTaskResume(xHandleMain) 실행이 안되어야 하지 않는지요? 실행 결과 TaskMain이 실행되어 이렇게 문의드립니다. 감사합니다.
안녕하세요. 수업을 듣던 중 정적/동적 Task 생성 시 할당되는 메모리 영역과 관련해 질문 사항이 생겨 글 남깁니다. 태스크와 메모리 파트 강의를 듣고 Task Stack 메모리는 동적/정적 할당이 가능하고, RTOS의 동적 할당은 RTOS 커널에서 지원하는 동적 메모리 할당자 함수를 쓰기 때문에 heap영역이 아닌 bss 영역에서 할당된다. 라고 이해하였습니다. 즉, xTaskCreate() 함수를 사용하면 동적 할당이지만 데이터가 bss 영역에 할당되는 특성이 있다고 생각했었는데, '태스크 스택의 크기를 결정하기' 부분의 강의 끝부분에서 xTaskCreate() 는 heap 영역에 xTaskCreateStatic() 은 bss 영역에서 Task Stack을 쓴다고 말씀하여 기존에 제가 이해했던 부분과 일치하지 않았습니다. 이와 관련해 인터넷에 검색해 보니, freertos.org 사이트에서는 xTaskCreate()를 사용하여 작업을 생성하면 필요한 RAM이 FreeRTOS 힙에 자동으로 할당된다. 라고 적혀있더군요. xTaskCreate() 함수는 bss 영역에 자동 할당되기도 하고, heap 영역에 자동 할당되기도 한다는 의미인가요?