결과적으로 자바는 call by value입니다. C/C++과 같이 주소값을 직접 사용하는 것이 아닌, 복사해서 사용합니다.


반면, C/C++은 call by reference로 값을 전달할 경우 주소 자체가 전달됩니다.


C++
#include 
using namespace std;

class Student{
public:
    int age;
public:
    Student(int age) : age(age){
    }
     ~Student(){
    }
};

void change(Student &st){
    st = Student(50);
}

int main(){
    Student st(14);
    cout << st.age << endl;
    change(st);
    cout << st.age << endl;
    return 0;
}


출력>>

14

50


JAVA


class Student{
    int age;
    Student(int age){
     this.age=age;
 }
}

public class Test {
 public static void change(Student user) {
     user = new Student(50);
 }

 public static void main(String[] args) {
     Student st = new Student(14);
     System.out.println(st.age);
     change(st);
     System.out.println(st.age);
 }
}


출력>>

14

14


http://www.m2sj.info/entry/%EC%9E%90%EB%B0%94-%EC%9E%90%EB%B0%94%EB%8A%94-%ED%95%AD%EC%83%81-Call-By-Value-%EC%9D%B4%EB%8B%A4


http://gall.dcinside.com/board/view/?id=programming&no=891104&page=3&search_pos=&s_type=search_all&s_keyword=si

※Primitive Type


Primitive Type은 JavaVM에서 지원하는 비객체형 타입입니다. 비객체라는 건 자바에서 사용되는 객체형 타입은 아니지만 예외적으로 지원을 해야하는

기본형 타입을 말하는 것입니다. byte, int, shot, long, integer, float, double, 부동소수점 개열과 boolean등을 예로 들 수 있습니다.


Reference Type


Reference Type은 java에서의 최상위 클래스인 java.lang.Object클래스를 상속하는 모든 클래스들을 말합니다. 물론 new로 인하여 생성하는 것들을

메모리 영역 heap영역에 생성을 하게되고, Garbage collecto라는 곳에 등록을 하게되고 버려집니다.


http://inetizenseo.tistory.com/12

※객체와 인스턴스


클래스에 의해서 만들어진 객체를 인스턴스라고 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 이렇게 생각해보자.

Animal cat = new Animal(); 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스(instance)이다. 즉, 인스턴스라는 말은

특정 객체(cat)가 어떤 클래스(Animal)의 객체인지를 관계위주로 설명할 때 사용된다. 즉, "cat은 인스턴스"보다는 "cat은 객체"라는 표현이

"cat은 Animal의 객체"보다는 "cat은 Animal의 인스턴스"라는 표현이 훨씬 잘 어울린다.


https://wikidocs.net/214

1. 멀티 프로세싱


- 여러 개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법


2. 멀티 프로그래밍


- 한개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법



'STUDY > OS' 카테고리의 다른 글

[OS]데드락(Dead lock)  (0) 2018.08.27
[OS]프로세서 스케줄링의 종류  (0) 2018.08.26
[OS]컴파일러 & 인터프리터  (0) 2018.08.25
[OS]링커 & 로더  (0) 2018.08.25

리팩토링이란?


리팩토링은 외부동작을 바꾸지 않으면서 내부구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다.


*리팩토링시 중요한 점 


- 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것이다.

  따라서, 리팩토링을 할 때는 기능을 추가해서는 안되고, 단지 코드의 구조에만 신경 써야한다.


- 리팩토링은 가동중인 프로그램을 취해서, 동작을 바꾸는 것이 아니라 우리가 빠른 속도로 개발할 수 있도록 하는 특성을 좀더 많이 주어,

  프로그램의 가치를 높이는 것이다.



http://codereview.tistory.com/3

교착상태(데드락)


- 데드락은 두 개 이상의 프로세스나 쓰레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말합니다.


* 데드락을 피하는 방법

  • 상호배제 : 하나의 자원을 특정 시기에 하나의 프로세스/쓰레드만 소유할 수 있는 형태
  • 자원점유 : 하나의 자원을 소유하고 다른 프로세스 혹은 쓰레드의 자원을 요청하는 상태
  • 선취 불가능 : 하나의 프로세스/쓰레드에게 주어진 자원은 해당 프로세스/쓰레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태
  • 순환대기 : 두 개의 프로세스/쓰레드의 경우, A->B, B->C, C->A에게 서로 자원을 요청하고 기다리는 상황으로 서로 꼬리를 물고 기다리는 상황

   

4가지 중 하나라도 불충족하면 데드락이 발생하지 않음.


http://includestdio.tistory.com/12

'STUDY > OS' 카테고리의 다른 글

[OS]멀티 프로세싱과 멀티 프로그래밍  (0) 2018.09.01
[OS]프로세서 스케줄링의 종류  (0) 2018.08.26
[OS]컴파일러 & 인터프리터  (0) 2018.08.25
[OS]링커 & 로더  (0) 2018.08.25

*지속적으로 업데이트 되는 게시물입니다.


2018-08-26

----------------------------------------------------------------------------------------------------------------------


http://manducku.tistory.com/44 개발 언어에 대한 면접질문 및 OS문제


http://demoversion.tistory.com/13 엄청 빡빡하지만 면접보기전 꼭 봐야할 예상 면접문제!


http://blog.naver.com/PostView.nhn?blogId=kbh3983&logNo=220777337921&categoryNo=17&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView


----------------------------------------------------------------------------------------------------------------------


면접보기전 꼭 숙지하고 가야할 면접 문제들 !

비선점(Non-Preemptive) 스케줄링


- 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법

- 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때가지 CPU사용

- 장점 : 모든 프로세스에 대한 요구를 공정하게 처리할 수 있음

  단점 : 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있음



선점(Preemptive) 스케줄링


- 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 

  있는 스케줄링 기법

- 선점을 위해 시간 배당을 위한 인터럽트용 타이머 클럭이 필요함

- 장점 : 우선순위가 높은 프로세스를 빠르게 처리할 수 있음

  단점 : 선점으로 인한 많은 오버헤드를 초래함



https://m.blog.naver.com/PostView.nhn?blogId=bestheroz&logNo=105116025&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


'STUDY > OS' 카테고리의 다른 글

[OS]멀티 프로세싱과 멀티 프로그래밍  (0) 2018.09.01
[OS]데드락(Dead lock)  (0) 2018.08.27
[OS]컴파일러 & 인터프리터  (0) 2018.08.25
[OS]링커 & 로더  (0) 2018.08.25

컴파일러


 - 고급 언어로 작성된 소스 프로그램 전체를 목적 프로그램으로 번역 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행

   프로그램을 생성

 - 번역 과정이 번거롭고, 번역 시간이 오래 걸리지만 실행 속도가 빠름

 - C/C++등이 컴파일러를 사용함


인터프리터


 - 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시 

   키는 프로그램

 - 줄 단위로 번역 실행되기 때문에 시분할 시스템에 유용함

 - 프로그램이 직접 실행되므로 목적 프로그램이 생성되지 않음

 - 번역 속도는 빠르지만 실행 속도는 느림

 - BASIC, JavaScript등이 인터프리터를 사용함



http://hieroglyph.tistory.com/4

'STUDY > OS' 카테고리의 다른 글

[OS]멀티 프로세싱과 멀티 프로그래밍  (0) 2018.09.01
[OS]데드락(Dead lock)  (0) 2018.08.27
[OS]프로세서 스케줄링의 종류  (0) 2018.08.26
[OS]링커 & 로더  (0) 2018.08.25

링커 


- 언어 번역 프로그램이 생성한 목적 프로그램들과 라이브러리, 또 다른 실행 프로그램(로드 모듈)등을 연결하여 실행 가능한    로드 모듈을 만드는 시스템 소프트웨어입니다.

- 연결 기능만 수행하는 로더의 한 형태로, 링커에 의해 수행되는 작업을 링킹(Linking)이라 한다.


ex) 컴파일 가능한 A.cpp, B.cpp, C.cpp가 있다면, 컴파일 과정을 통해 A.obj, B.obj, C.obj를 만듭니다. 그리고 Excutable file을 

만들기 위해  A.obj, B.obj, C.obj를 연결하는 과정을 '링커'라고 합니다.



로더


- 컴퓨터 내부로 정보를 들여오거나, 로드 모듈을 디스크의 보조기억장치로부터 주기억장치에 적재하는 시스템 소프트웨어.



http://yimoyimo.tk/Linker-and-Loader/

'STUDY > OS' 카테고리의 다른 글

[OS]멀티 프로세싱과 멀티 프로그래밍  (0) 2018.09.01
[OS]데드락(Dead lock)  (0) 2018.08.27
[OS]프로세서 스케줄링의 종류  (0) 2018.08.26
[OS]컴파일러 & 인터프리터  (0) 2018.08.25

+ Recent posts