CS 스터디 2주차

Park Jae Hong·2023년 5월 23일
0

프로세스 혹은 스레드의 동기화란 무엇인가요?

: 프로세스나 스레드의 동기화는 병행 실행되는 여러 개의 프로세스 또는 스레드 간에 데이터나 자원에 대한 접근을 조절하여 일관성과 안전성을 보장하는 메커니즘입니다. 동기화는 동시에 실행되는 여러 개의 프로세스나 스레드가 공유하는 데이터에 접근할 때 발생하는 문제를 해결하고, 데이터의 무결성을 유지하기 위해 사용됩니다.

방법 - 뮤텍스, 세마포어, synchronized

사용자 수준의 스레드와 커널 수준의 스레드의 차이는 무엇인가요?

: 가장 큰 차이점은 운영체제의 사용 유무 라고 할 수 있는데요. 사용자 수준의 스레드에 경우 운체제를 인식하지 못해 스레드에 대한 스케줄링과 관련된 결정을 응용 프로그램 내에서 수행해야하고 커널 수준의 스레드에 경우는 운영체제에서 제공하는 스레드 관련 기능을 사용할 수 있어 효과적인 스케줄링을 할 수 있습니다.

동기화 오버헤드 ?

: 사용자 수준은 커널에 비해 상대적을 작다.
그래서 커널 수준의 스레드에서 시스템 호출이 자주 발생할 경우 성능 저하가 발생할 수 있습니다.

블로킹

: 사용자 수준 스레드의 경우 전체 응용프로그램이 영향을 받을 수 있지만, 커널 수중의 스레드의 경우에는 운영체제에서 스케줄링을 관리하기 때문에 다른 스레드는 계속해서 실행됩니다.

멀티 코어 ?

: 커널 스레드는 운영체제에서 스케줄링을 관리하기 떄문에 멀티코어 시스템에서 병렬 실행을 효과적으로 수행할 수 있는 반면, 사용자 수준의 스레드의 경우에는 직접 스케줄링을 구현해야하기 때문에 멀티코어 시스템에서 병렬 실행이 이루어지지 않을 수 있습니다.

사용자 수준의 스레드에서 멀티코어 시스템에서 병렬처리하기 위한 방법은 ?

  • 멀티스레딩
    : 응용 프로그램 내에 여러개의 스레드를 만들어서 각각의 스레드에 다른 코어를 할당하는 방식

  • 스레드 풀
    : 스레드의 개수를 미리 고정해서 스레드 생성 비용과 제거 비용을 줄이는 방식

CPU 스케줄링이란 무엇인가요?

: CPU 스케줄링은 운영체제가 여러 개의 프로세스 또는 스레드 중에서 CPU 자원을 할당하는 방법을 결정하는 것을 말합니다. 여러 개의 실행 가능한 프로세스나 스레드가 동시에 존재하면, CPU 스케줄러는 어떤 프로세스 또는 스레드가 CPU를 사용할 수 있는지, 얼마나 오랫동안 사용할 수 있는지, 어떤 순서로 실행할지 등을 결정합니다.

CPU 스케줄링 방법에는 대표적으로 어떤 것들이 있나요?

  • FCFS (First-Come, First-Served):
    가장 간단한 스케줄링 알고리즘으로, 도착한 순서대로 프로세스를 실행하는 방식입니다. 먼저 도착한 프로세스가 CPU를 먼저 할당받으며, 실행이 완료될 때까지 계속 실행됩니다. 선입선출 방식으로 공정한 스케줄링을 제공하지만, 실행 시간이 긴 프로세스가 먼저 도착하면 평균 응답 시간이 길어질 수 있습니다.

  • SJF (Shortest Job First):
    실행 시간이 가장 짧은 프로세스에게 CPU를 할당하는 방식입니다. 실행 시간이 짧은 작업을 먼저 처리하여 평균 응답 시간을 최소화합니다. 하지만 프로세스의 실행 시간을 미리 알 수 없기 때문에 정확한 예측이 어렵고, 실행 시간을 추정해야하는 단점이 있습니다.

  • Round Robin:
    고정된 시간 슬라이스(Time Slice)를 정의하고, 각 프로세스는 할당된 시간 동안 CPU를 사용합니다. 할당된 시간이 지나면 다른 프로세스에게 CPU를 양도하고, 다음 순서에 다시 할당됩니다. 모든 프로세스는 동일한 시간을 가지고 CPU를 사용하므로 공정한 스케줄링을 제공합니다. 하지만 긴 작업이 짧은 작업을 기다려야하는 '문제'가 발생할 수 있습니다.

  • Priority Scheduling:
    각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스에게 CPU를 할당하는 방식입니다. 정적 우선순위와 동적 우선순위 방식이 있으며, 실행 우선순위를 조절하여 특정 작업의 우선 처리를 보장할 수 있습니다. 그러나 우선순위 역전과 같은 문제가 발생할 수 있으므로 적절한 우선순위 관리가 필요합니다.

동기와 비동기, 블로킹과 넌블로킹의 차이는 무엇인가요?

먼저, 동기와 비동기는 작업의 완료를 기다리는 방식을 나타내고, 블로킹과 넌블로킹은 호출한 쪽이 작업의 완료를 기다리는 동안 다른 작업을 수행할 수 있는지 여부를 나타냅니다.

동기(Synchronous):
동기적인 작업은 호출된 함수 또는 작업이 완료될 때까지 대기하는 방식입니다.

비동기(Asynchronous):
비동기적인 작업은 호출된 함수 또는 작업을 호출한 후에도 다른 작업을 수행할 수 있는 방식입니다.

블로킹(Blocking):
블로킹은 함수 또는 작업이 호출된 후에 반환될 때까지 호출한 쪽이 대기하는 것을 말합니다. 호출된 함수가 완료되기 전까지는 호출한 쪽이 일시 정지되어 다른 작업을 수행할 수 없습니다.

넌블로킹(Non-blocking):
넌블로킹은 함수 또는 작업이 호출된 후에도 호출한 쪽이 대기하지 않고 즉시 반환되는 것을 말합니다. 호출한 쪽은 작업이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수 있습니다. 작업이 완료되었는지 여부는 호출한 쪽에서 확인하거나, 콜백 또는 이벤트 핸들러를 통해 알 수 있습니다.

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글