인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 01 입니다.

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 01 입니다.

CS전공지식 미션 1

 

운영체제

while(true){
      wait(1); // 1초 멈춤
      bool isActivated = checkSkillActivated(); // 체크
    }
  1. 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?

스스로가 체크하지 않고, 플레이어가 스킬을 사용하면 스킬이 활성화되었다고 알려주는 인터럽트 방식을 사용할 것 같습니다. 인터럽트 방식은 다른 작업을 수행하고 있다가 하고있는 동작을 멈추고 인터럽트 서비스 루틴을 실행하여 그 인터럽트를 처리하는 방식입니다.

 

  1. 프로그램과 프로세스가 어떻게 다른가요?

프로그램은 저장장치에 저장된 명령어의 집합으로 이루어진 애플리케이션이나 .exe 실행파일을 말하는데, 어떠한 트리거에 의해 프로그램이 저장장치에서 메모리에 올라가 운영체제 관리하에 놓이면 프로세스라고 합니다.

 

  1. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?

멀티프로그래밍은 메모리에 여러개의 애플리케이션이 올라가는 것을 말하고, 멀티 프로세싱은 CPU가 여러개의 프로세스를 처리하는 것을 말합니다. 메모리의 관점에서 여러개를 처리하느냐, CPU의 관점에서 여러개를 처리하느냐로 나눌 수 있습니다.

 

  1. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?

운영체제는 프로세스를 관리하기 위해 프로세스 컨트롤 블록(PCB)를 활용합니다. PCB는 각 프로그램이 메모리에 올라오면 각각 생성되어 연결리스트로 연결되어 저장됩니다. 각 PCB는 프로세스의 식별자, 프로그램카운터, 레지스터 정보등을 담고 있습니다. CPU가 여러개의 프로세스를 번갈아가면서 처리할때 작업중이던 프로세스는 PCB의 정보를 업데이트하고 다른 프로세스는 PCB에서 정보를 읽어서 명령어를 실행합니다.

 

  1. 컨텍스트 스위칭이란 뭔가요?

컨텍스트 스위칭은 CPU가 스케쥴링에 의한 시분할 처리로 프로세스를 실행하는 중에 다른 프로세스를 실행하기위해 실행중인 프로세스를 잠시 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 말합니다. 이때 기존 실행중이던 프로세스의 작업내용을 PCB에 저장하고, 실행될 프로세스는 PCB에서 읽어와 CPU에 프로그램카운터 등 레지스터값이 세팅됩니다.

 

자료구조와 알고리즘

  1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.



    학생정보를 저장하기 위해서는 해시 테이블구조를 선택하겠습니다. 학생정보는

    학생을 식별할 수 있어야하고 학생의 여러 속성정보들을 가져야하기 때문에 학생의 식별자를 key로 가지고 학생의 정보를 value로 가지고 있으면 학생을 검색하는데에도 빠르고 O(1), 데이터를 추가하는데도 용이하기 때문입니다. 다만 해시테이블 구조는 메모리가 많이 필요하기때문에 유의해야합니다.


    자바 코드로 예시를 작성해봤습니다.

     

public class Student {
  String name; // 이름
  int age; // 나이
  String major; // 전공
  int grade; // 학년

  // 생성자
  public Student(String name, int age, String major, int grade) {
    this.name = name;
    this.age = age;
    this.major = major;
    this.grade = grade;
  }

  public static void main(String[] args) {
    // HashMap 생성 (키는 학생 고유 번호, 값은 학생 정보)
    HashMap<Integer, Student> studentMap = new HashMap<>();

    // 학생 정보 추가
    studentMap.put(101, new Student("김미소", 20, "컴퓨터공학", 2));
    studentMap.put(102, new Student("이고은", 21, "인문학", 3));
    studentMap.put(103, new Student("박현성", 19, "경영학", 1));

    // 모든 학생 정보 출력
    for (Integer id : studentMap.keySet()) {
      System.out.println("학생 고유 번호: " + id + ", " + studentMap.get(id));
    }
    
  }
}

 

  1. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.

주문은 들어온 순서대로 처리되기 때문에 선입선출(First In First Out)방식인 구조인 큐를 선택하겠습니다. 큐는 가장 먼저 들어온 주문이 먼저 처리되고 제거되기 때문에 순서대로 처리하는 방식에 적합합니다.

댓글을 작성해보세요.

  • 빠타박스
    빠타박스

    보통 인강 학습을 어떻게 하시나요?

    정리하면서 하는게 아니라 그냥 보시는 편이신가요?


    하얀종이개발자
    하얀종이개발자

    저 같은 경우는 중요한 것만 따로 기록하는데요, 시간이 여유로운 상황이거나 확실하게 학습해야겠다 싶으면 강의에서 중요하게 다루는 개념이거나 궁금한 부분이 생기면 세세하게 따로 찾아보면서 채우는 것 같아요. (구글 검색 or GPT) 별로 효율적인 학습방법은 아닐수도 있어요

채널톡 아이콘