1. 자바 플레이 그라운드 with TDD, 클린 코드
- 블랙잭 구현 중
- Player와 Dealer의 공통 부분을 Person 인터페이스로 구현
- Person은 saveCard, getCards를 멤버로 갖는다.
- Player는 배팅금액을 저장하는 변수를 추가
- Cards클래스에 a,1~9,j,q,k를 요소로하는 String배열을 담는 변수 추가(private범위) -> 각 종류의 카드들의 생성자에서 부모클래스의 생성자를 호출해서 해결
2. 혼자서 공부하는 컴퓨터 구조 + 운영체제
운영체제 개요
* 프로세스
- 정의 : 실행 중인 프로그램(메모리에 적재된 상태 -> 보조기억장치에만 있는 프로그램과는 다르다.)
- foreground process <-> background process(사용자 눈에 보이는 vs 사용자 눈에 보이지않는)
- 백그라운드 프로세스 중 사용자와 상호작용을 하지하는 것을 데몬(유닉스), 서비스(윈도우)라고 부른다.
- PCB(Process Control Block) : 프로세스의 상세 정보를 담고있는 자료구조. 커널영역에서 운영체제가 생성
- PCB에 담겨있는 정보들
종류 | 내용 |
프로세스 ID | 프로세스를 식별할 수 있는 고유번호(DB의 기본키를 생각하자) |
레지스터 값 | CPU는 한번에 하나의 프로세스만 실행 가능 -> 프로세스를 번갈아가며 실행해야함 -> 프로세스 문맥교환이 일어날 때 중간값(프로그램 카운터 등)을 저장해야함 |
프로세스 상태 | 준비, 실행, 대기 등의 상태정보를 저장 |
CPU스케줄링 정보 | 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보 |
메모리 관리 정보 | - 프로세스가 메모리에 저장되어 있는 위치. 논리주소를 활용한 베이스레지스터, 한계레지스터값을 저장 - 페이지 테이블 정보 저장 |
사용한 파일과 입출력장치 목록 |
프로세스 실행 과정 중 특정 입출력장치나 파일 사용 시 정보 저장 |
- 프로세스의 메모리 영역
구분(segment) | 내용 |
코드 영역(text) | - 텍스트 영역이라고도 불리며 기계어로 이루어진 명령어가 저장 - 읽기 전용공간(수정시 오류 발생) - 크기가 변하지 않는 정적 할당 영역 |
데이터 영역 (BSS,GVAR) |
- 프로그램 실행 동안 유지할 데이터가 저장되는 공간 - 대표 적으로 전역 변수(Java에서 static 변수) - 크기가 변하지 않는 정적 할당 영역 - BSS(초기화X), GVAR(초기화O) -> 초기화 되지 않는 데이터 까지 rom에 저장하면 크기가 불필요하게 커짐 |
힙 영역 | - 사용자가 직접 할당 할 수 있는 공간(멤버 변수) - 힙 영역에 할당된 메모리는 언젠간 반환되야 한다 -> 메모리 누수를 통한 낭비 방지 - 낮은 주소 -> 높은 주소 할당 |
스택 영역 | - 데이터를 일시적으로 저장하는 공간(지역,매개 변수 등) - 높은 주소 -> 낮은 주소 할당 |
* 프로세스 상태와 계층 구조
- 프로세스 상태 다이어그램
상태 | 내용 |
생성 | - 프로세스를 생성 중인 상태(이제 막 메모리에 적재되어 PCB를 할당 받은 상태) |
준비 | - 당장 CPU를 할당 받아 실행 할 수 있지만 차례를 기다리는 상태(준비 -> 실행을 디스패치라고한다.) |
실행 | - CPU를 할당받아 실행중인 상태(일정 시간만 사용가능 -> 끝나면 다시준비 상태) |
대기 | - 실행 중인 프로세스가 입출력장치를 사용하는 경우(특정 이벤트 발생 시) 입출력완료 인터럽트가 발생할 때까지 CPU를 스스로 반납하고 보류상태로 넘어간다. -> 입출력작업 속도가 CPU에 비해 느리기때문 - 입출력 완료 시 다시 실행으로 넘어가는 것이 아니라 준비상태로 전환 |
종료 | - 프로세스가 종료되며 운영체제는 PCB와 프로세스가 사용한 메모리를 정리 |
- 프로세스는 실행 도중 시스템 콜을 통해 다른 프로세스를 생성 할 수 있다.
- 이 때 생성되는 프로세스를 B, 기존 프로세스를 A라고 할 때, B는 A의 자식 프로세스다.(반대는 부모)
- 컴퓨터 부팅 시 최초의 프로세스가 다른 프로세스들을 생성
- 프로세스 생성 기법
구분 | 내용 |
fork | - 시스템콜을 통해 자신의 복사 프로세스로 새로운 프로세스를 생성(메모리 내용, 자원 등) |
exec | - 시스템 콜을 통해 복사본인 프로세스는 자신의 메모리 공간을 다른 프로그램으로 교체 |
* 프로세스를 Java로 다루는 부분에 대해 추가 공부 필요
참고 블로그 : https://kyu9341.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/2020/10/04/OS_Process_Structure/
http://blog.skby.net/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%EC%A0%84%EC%9D%B4/
3. 알고리즘
- 백준 11689번
- https://ahlight.tistory.com/110
백준 11689번 자바
1. 문제 https://www.acmicpc.net/problem/11689 11689번: GCD(n, k) = 1 자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 2. 접근 방식 오일
ahlight.tistory.com
'TIL' 카테고리의 다른 글
TIL - 0224 (0) | 2023.02.24 |
---|---|
TIL - 0223 (0) | 2023.02.23 |
TIL - 0221 (0) | 2023.02.21 |
TIL - 0220 (0) | 2023.02.20 |
TIL - 0218 (0) | 2023.02.18 |