SW Academy

[CNU SW Academy] 14일차(22.12.20)

narlo 2022. 12. 23. 13:13

김종익교수님 - OS

사용자와 컴퓨터 HW 중간에 끼어 있는 프로그램

사용자가 만든 프로그램을 실행시켜주고,

어떤 문제를 프로그램을 통해 해결하는 것을 좀 더 쉽게 해 주고,

HW를 효율적으로 사용할 수 있게 해 줌

kernal

컴퓨터가 실행되면 계속해서 실행되는 부분

운영체제의 가장 핵심 파트

 

interrupt

실행되던 정보를 어딘가에 저장하고,

처리하고 돌아왔을 때 다시 실행할 수 있도록 해야 한다.

 

Interrupt Handling

현재 CPU의 상태들을 저장

interrupt vector가 존재

 

Storage Structure

- main memory

CPU가 직접 접근 가능한 유일한

휘발성 메모리

 

- secondary storage

   비휘발성 메모리

   - hard disks : track, sector 단위로 나누어짐

   - solid-state disks(SS)

 

Caching

데이터를 더 빠른 저장공간으로 옮겨두는 것

 

Caching

cache replacement 정책

 

Direct Memory Access Structure(DMA)

CPU의 간선 없이 I/O Device가 데이터를 직접 메모리에 옮겨놓는

 

Operatind System Structure

- multiprogramming(batch system)

  Job Scheduling이 필요

- Timesharing(multitasking)

  작은 시간 구간을 나누어

  interactive한 컴퓨팅이 가능하다.

  여러 프로세스가 동시에 실행될 수 있다.(concurrent) => CPU scheduling이 필요

 

User mode

Kernal mode

system call이 kermal mode로 바꾸고, 처리가 끝나면 다시 user mode로 변환

 

타이머 => 타이머 interrupt

이를 통해 user mode, kernal mode가 전환

 

process management

program counter : 현재 실행 중인 명령의 주소를 가지고 있는

 

OS Structures

User Interface(UI)

Program execution

I/O Operations

File system manipulation

Communications

Error detection

 

Resource allocation

Accounting

Protection and security

 

System call

programming interface

운영체제가 제공하는 함수 형태(API)

응용 프로그램은 system call이 어떻게 구현되어 있는지 알 필요 없음

fork, open, read, socket, ...

interrupt 발생시킴


문현수박사님 - 팀 프로젝트 미팅

Figma 활용 프로토타입 제작

제작한 프로토타입의 일부분입니다. 프로토타입 링크는 보고서에 첨부하겠습니다.


김종익교수님 - DB

primary key

어떤 entity를 유일하게 구분 지어줄 수 있는 속성

 

entity : 다른 entity랑 구분이 된다.(attribute 값에 의해)

 

weak entity sets

partial key : 나를 구분해줄 primary key의 일부분을 가지고 있다.

네모 두개 => weak entity set

relation에도 두줄로

entity set을 모두 relation으로 만든다.

 

normalization of relational model

정규화, normal한 형태로 DB를 만드는 방법

 

decomposition

정보의 중복 문제를 막기 위해 두 schema로 나누는 것

 

Normal Forms

BCNF

Third Normal Form (3NF)


코딩테스트 - 원형 큐 구현

k = int(input())
q = [-1 for _ in range(k)]
index = 0
front = 0
rear = 0

def enQueue(n):
    global rear
    if isFull():
        return False
    q[rear % k] = n
    rear += 1
    return True

def deQueue():
    global front
    if isEmpty():
        return False
    q[front % k] = -1
    front += 1
    return True

def Front():
    return q[front%k]

def Rear():
    return q[(rear-1)%k]

def isEmpty():
    if front == rear:
        return True
    else:
        return False

def isFull():
    if rear - front == k:
        return True
    else:
        return False

while True:
    try:
        s = input().split(" ")
        result = ''
        if s[0] == "enQueue":
            result = enQueue(int(s[1]))
        elif s[0] == "deQueue":
            result = deQueue()
        elif s[0] == "Front":
            result = Front()
        elif s[0] == "Rear":
            result = Rear()
        elif s[0] == "isEmpty":
            result = isEmpty()
        else:
            result = isFull()
        print(str(result).lower())
    except EOFError:
        break